今晚不知道怎么回事,注意力不集中,简单的一道题想了n久.
这道题是这样的,定义一个过程,利用公式
b^n = (b ^ (n / 2) ^ 2) (n为偶数)
b^n = b * b ^ (n - 1) (n为奇数)
求b的n次幂.
这道题的诀窍就是定义一个不变量a, 使得a每次都保存着上次计算出的值.然后一层层递归下去, 直到n的值为1的时候,a就是要求的值.感觉迭代真的比直接递归要难理解得多
具体程序如下:
(define (square x)
(* x x))
(define (fast-expt-1 b n)
(define (fast-expt-iter a temp b n)
(cond ((= n 0) 1)
((= n 1) (* a temp))
((= (remainder n 2) 0) (fast-expt-iter (square a) temp b (/ n 2)))
(else (fast-expt-iter (square a) (* temp b) b (/ (- n 1) 2)))))
(fast-expt-iter b 1 b n))