Alex He

...永远保持希望与激情...约会未来更强大的自己...

 

迭代求幂计算过程[Lisp]

pow(b n)=pow(b*b,n/2)#if n is an even number
pow(b n)=b*pow(b,n-1)#else, n is an odd number
####################################################
(define (newpow b n)
    (define (fast-expt n b a)
      (cond ((= n 0) a)
            ((even? n) (fast-expt (/ n 2) (* b b) a))
            (else (fast-expt (- n 1) b (* a b)))))
    (define (even? n)
      (= (remainder n 2) 0))
    (fast-expt n b 1))
####################################################

> (newpow 2 3)
8
> (newpow 5 1)
5

posted on 2011-11-10 09:11  Alex木头  阅读(577)  评论(0编辑  收藏  举报

导航