迭代求幂计算过程[Lisp]
pow(b n)=pow(b*b,n/2)#if n is an even numberpow(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