|
|
|
|
|
by shoki
4425 days ago
|
|
Not corecursive, but here's the SICP O(ln(n)) algorithm: fibonacci = fib 1 0 0 1
where
fib a b p q n
| n == 0 = b
| even n = fib a b p' q' (n `div` 2)
| otherwise = fib a' b' p q (n - 1)
where
p' = p*p + q*q
q' = 2*p*q + q*q
a' = a*q + b*q + a*p
b' = b*p + a*q
|
|