일단 halve와 double을 임시로 만들자
b가 짝수인 경우 a*b = 2 * a * (b / 2)이고
b가 홀수인 경우 a*b = a + a*(b-1)과 같다.
이를 프로시저로 정의하면

(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)))))))

댓글 없음:
댓글 쓰기