Liczby Fibonacciego¶
Opis problemu¶
Podejście naiwne¶
Implementacja¶
Opis¶
Funkcja fib
przyjmuje jeden argument: numer n
w ciągu Fibonacciego, dla którego ma zostać obliczona wartość.
- Warunki bazowe: funkcja definiuje wartości dla pierwszego (1) i drugiego (2) elementu ciągu jako 1. To niezbędne warunki bazowe dla rekurencji.
- Rekurencyjne wywołanie: dla każdej wartości
n
większej niż 2, funkcja oblicza wartość wywołując się rekurencyjnie dwa razy:fib (n-1)
ifib (n-2)
, a następnie sumując otrzymane wyniki. To właśnie tworzy ciąg Fibonacciego.
W głównym programie (main
) wywołujemy funkcję fib
dla konkretnej wartości n
, w tym przypadku 10. Wynik, czyli dziesiąty element ciągu Fibonacciego, jest następnie wyświetlany.
Podejście dynamiczne¶
Implementacja¶
Opis¶
Funkcja fib
przyjmuje jeden argument: numer n
w ciągu Fibonacciego, dla którego ma zostać obliczona wartość.
- Wykorzystanie leniwych list: funkcja definiuje nieskończoną listę
fibs
, która zawiera ciąg Fibonacciego. Lista jest tworzona za pomocą operatora:
(cons) i funkcjizipWith
, która sumuje kolejno elementy listyfibs
i jej ogona (tail fibs
). Dzięki leniwemu obliczaniu Haskell wyliczy tylko te elementy listy, które są faktycznie potrzebne. - Dostęp do elementu ciągu: główna funkcja
fib
dostaje dostęp do konkretnego elementu ciągu, korzystając z operatora!!
i indeksując listęfibs
(z uwzględnieniem, że Haskell używa indeksowania od zera, stądn - 1
).
W głównym programie (main
) wywołujemy funkcję fib
dla konkretnej wartości n
, tutaj dla 10. Wynik, czyli dziesiąty element ciągu Fibonacciego, jest następnie wyświetlany.