迭代求幂计算过程[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
浙公网安备 33010602011771号