2008. 3. 4.

연습문제 1.17

일단 halve와 double을 임시로 만들자

(define (halve x) (/ x 2))
(define (double x) (* x 2))

b가 짝수인 경우 a*b = 2 * a * (b / 2)이고
b가 홀수인 경우 a*b = a + a*(b-1)과 같다.

이를 프로시저로 정의하면

(define (mul a b)
  (if (= b 0)
      0
      (cond ((even? b) (double (mul a (halve b))))
            (else (+ a (mul a (- b 1)))))))
과 같다

댓글 없음:

댓글 쓰기