解:这道题很有意思,结论是斐波那契数也可以用对数时间复杂度获得。
通过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))
时间: 2024-09-30 06:48:10