summaryrefslogtreecommitdiff
path: root/fib.hs
blob: 647f75eadf8b309d3757c9c4d8977726cad127fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
fib n = fi n 1 1

fi 1 x y = x
fi a x y = fi (a-1) (x+y) x

ffib n = ffi n 1 1 1 0 1 0

ffi 1 a b c d x y = (a*x + b*y)
ffi n a b c d x y = 
    if odd n 
        then ffi (div n 2) (a*a + b*c) (a*b + b*d) (a*c + c*d) (d*d + b*c) (a*x + b*y) (c*x + d*y)
        else ffi (div n 2) (a*a + b*c) (a*b + b*d) (a*c + c*d) (d*d + b*c) x y