解:这道题很有意思,结论是斐波那契数也可以用对数时间复杂度获得。
通过Tpq(Tpq)=TPQ建立方程,解得:
P=pp+qq
Q=qq+2pq
程序如下:
(define (fib n) (define (even? n) (= (remainder n 2) 0)) (define (fib-iter a b p q count) (cond ((= count 0) b) ((even? count) (fib-iter a b (+ (* p p) (* q q)) (+ (* q q) (* 2 p q)) (/ count 2))) (else (fib-iter (+ (* b q) (* a q) (* a p)) (+ (* b p) (* a q)) p q (- count 1))))) (fib-iter 1 0 0 1 n))
原文:http://my.oschina.net/u/1445655/blog/295101