1.16

; 不变量 b, 状态量 a, 计数器 n

; 状态变化, n 是偶数时:

; ab^(n) = a(b^2)^(n/2)

; a -> a, b -> b^2, n -> (n/2)

; n 是奇数时:

; ab^(n) = ab(b^(n-1))

; a -> ab, b -> b, n -> (n-1)

(define (expt b 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 b n))

(display (expt 2 1000))