2010-10-18

問題1.16

(5am:test exercise-1.16
  (5am:is (= 1 (fast-expt 2 0)))
  (5am:is (= 2 (fast-expt 2 1)))
  (5am:is (= 8 (fast-expt 2 3)))
  (5am:is (= (* 2 (fast-expt 2 9))
             (fast-expt 2 10))))

(defun square (x)
  (* x x))

(defun fast-expt-iter (b n a)
  (cond ((zerop n) a)
        ((evenp n) (fast-expt-iter (square b) (/ n 2) a))
        (t (fast-expt-iter b (1- n) (* a b)))))

(defun fast-expt (b n)
  (fast-expt-iter b n 1))

1 件のコメント:

  1. squareは別に定義しなくても良かったけど、再帰的アルゴリズムに合わせて。トレースすると、bが大きくなっていくのは面白い。

    返信削除