Fibonacci数をO(log n)で求めるアルゴリズムがあるとかないとかで,なんかがんばれとか書かれている。
という変換があるとすると,その変換を2回すると、とかなるので,を2度繰り返す変換は、とかでかけるみたいです。これをschemeでかく。
(define (square x) (* x x)) (define (fib n) (fib-iter 1 0 0 1 n)) (define (fib-iter a b p q count) (cond ((= count 0) b) ((even? count) (fib-iter a b (+ (square p) (square q)) (+ (* 2 p q) (square q)) (/ count 2))) (else (fib-iter (+ (* b q) (* a q) (* a p)) (+ (* b p) (* a q)) p q (- count 1)))))