理系学生日記

おまえはいつまで学生気分なのか

問題1.16

どしてもわからなかったので、答えみたよ。

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

(define (square x) (* x x))

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