Liczby Fibonacciego¶
Opis problemu¶
Podejście naiwne¶
Implementation¶
Description¶
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
nwię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¶
Implementation¶
Description¶
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 listyfibsi 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
fibdostaje 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.