続・問題 1.16

無職の間にSICPも読んでみる。目標は焦らずしっかりと読む。問題の解答をさらす。解く順番は出来るだけリニア。


昨日 id:mohayonao:20090316:1237205020 のつづき


偶数でも奇数でも常に2で割る方法にしてみた。

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


昨日のはコッチ

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