問題1.16

今回はb^nとかのべき乗の計算を再帰ではなくて反復で解く問題。


(define (fast-expt b n)
  (fast_expt_iter 1 b n))

(define (even? n)
  (= (remainder n 2) 0))

(define (fast_expt_iter a b n)
  (cond ((= n 0) a)
	((even? n) (fast_expt_iter (* a (square b)) b (/ n 2)))
	(else (fast_expt_iter (* a b) b (- n 1)))))

時間が無くて実行すらしてないが、
まぁ、多分こんな感じ。
暇なときにもで実行するか。