Name: Anonymous 2008-12-20 15:04
fibs = 1 : zipWith (+) fibs (tail fibs)
fibs = 1 : zipWith (+) fibs (tail fibs)
(define (fib n)
(define (iter a b p q count)
(cond ((= count 0) b)
((even? count)
(iter a
b
(+ (* p p) (* q q))
(+ (* 2 p q) (* q q))
(/ count 2)))
(else (iter (+ (* b q) (* a q) (* a p))
(+ (* b p) (* a q))
p
q
(- count 1)))))
(iter 1 0 0 1 n))