斐波那契算法的对数解法 计算机程序的构造和解释 习题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)))))

 

posted @ 2015-01-19 20:41  Pxjw  阅读(542)  评论(0编辑  收藏  举报