Ciąg Fibonacciego Haskell

0

Witam,

zostalem zmuszony do nauki haskella, a jako ze do tej pory uczylem sie tylko jezykow imperatywnych, to haskell mnie wykancza.

Moim zadaniem bylo napisanie ciagu fibonacciego w czasie liniowym. Mam wiec kod i bylbym bardzo wdzieczny, gdyby ktos wytlumaczyl mi krok po kroku co sie tam dzieje :))

fib 0 = (0, 1)
fib (n+1) = (y, x + y)
   where (x, y) = fib n 

Pozdrawiam

0

Kod jest stary i nowy GHC go nie przepuści, ale jest tak:

  1. Definiujesz funkcję fib, która jeśli jako jedyny argument przyjmie 0 zwraca krotkę typu (Int, Int) o wartościach (0, 1)
  2. Dla n+1 zwraca krotkę zawierającą (y, x + y) gdzie x i y to wartości krotki dla argumentu n
    Można to zapisać jako nieskończoną listę (będzie się wykonywać szybciej niż kod podany przez Ciebie):
list_fib = 0 : 1 : ( zipWith (+) list_fib $ tail list_fib )

1 użytkowników online, w tym zalogowanych: 0, gości: 1