斐波那契算法的对数解法 计算机程序的构造和解释 习题1.19
程序由Scheme语言编写,待会上别的语言实现。
#lang racket ;斐波那契对数法 ;筛选 (define (fib n) (fib-iter 1 0 0 1 n)) (define (square x) (* x x)) (define (fib-iter a b p q count) (cond ((= count 0) b);count = 0时,fib(1) = 0 ((even? count);如果是偶数,那么,p,q的值分别为 ;p = p^2 + q^2 ;q = 2pq + q^2 ;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 q) (* a q)) p q (- count 1)))))