(define (fast-expt b n)
(fast-expt-iter b n 1))
(define (fast-expt-iter b n a)
(cond ((= n 0) a)
((even? n) (fast-expt-iter (* b b) (/ n 2) a))
(else (fast-expt-iter b (- n 1) (* a b)))))
(define (even? n)
(= (remainder n 2) 0))
(fast-expt 2 10)
自己在转换递归和迭代时还是不怎么熟练,还需要翻阅别人的代码,真失败。
书上有一句话说的很在理:一般说,定义一个不变量,要求它在状态之间保持不变,这一技术是思考迭代算法设计问题时的一种非常强有力的方法。