-------------------- -- Several versions of Fibonacci -------------------- -------------------- -- Standard recursive version (slow!) fibr 0 = 0 fibr 1 = 1 fibr n = fibr (n-1) + fibr (n-2) -------------------- -- Accumulating parameter version fiba n = fib 0 1 n where fib p q 0 = p fib p q 1 = q fib p q n = fib q (p+q) (n-1) -------------------- -- Zipped list version (using a LOCAL definition) fibl n = fibs !! n where fibs = 0 : 1 : zipWith (+) fibs (tail fibs) -------------------- -- Zipped list version (using a GLOBAL definition) fibl' n = fibs' !! n fibs' = 0 : 1 : zipWith (+) fibs' (tail fibs') -------------------- -- Some sample values for testing timing results j = fibl' 100 k = fibl' 100 ys = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30] y = ys !! 29