문제를 열심히 풀어놓고 보니 반복 프로세스로 풀어버린걸 연습문제 1.18을 읽고 깨달아버렸다;; 이거 어디서 많이 보던 시추에이숑인데 싶어서 뒤져보니 컴키드님도 같은 실수를 하셨었다. 히힛
그래서 다시 되풀이 프로세스로 풀어낸 답이다.
로그비례로 자라나는 곱셈 프로시저를 우선 공식으로 풀어보면
b 값이 짝수일 때는, 2 * (a * (b / 2))
b 값이 홀수일 때는, a + (a * (b - 1))
스터디 모임에서 연습문제 1.17과 1.18에서 음수를 입력 받은 경우 무한 반복에 빠진다는 이야기가 있었는데, 일단은 여기까지만 풀고 음수 처리는 나중에 다시 생각해봐야겠다.
그래서 다시 되풀이 프로세스로 풀어낸 답이다.
로그비례로 자라나는 곱셈 프로시저를 우선 공식으로 풀어보면
b 값이 짝수일 때는, 2 * (a * (b / 2))
b 값이 홀수일 때는, a + (a * (b - 1))
(define (double a)
(+ a a))
(define (halve a)
(/ a 2))
(define (even? n)
(= (remainder n 2) 0))
(define (fast-* a b)
(cond ((= b 0) 0)
((even? b) (double (fast-* a (halve b))))
(else (+ a (fast-* a (- b 1))))))
스터디 모임에서 연습문제 1.17과 1.18에서 음수를 입력 받은 경우 무한 반복에 빠진다는 이야기가 있었는데, 일단은 여기까지만 풀고 음수 처리는 나중에 다시 생각해봐야겠다.


덧글
오자 2008/03/30 22:09 # 답글
역사는 되풀이 되는 겁니다.. (뭠미..) 사는게 쉽지 않죠? ㅎㅎ
지아 2008/03/31 18:09 # 답글
다음에 어떤 상황이 되풀이 될까요? ㅋㅋ