[SICP] 연습문제 1.17 SICP스터디

문제를 열심히 풀어놓고 보니 반복 프로세스로 풀어버린걸 연습문제 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에서 음수를 입력 받은 경우 무한 반복에 빠진다는 이야기가 있었는데, 일단은 여기까지만 풀고 음수 처리는 나중에 다시 생각해봐야겠다.

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://grow.egloos.com/tb/4256023 [도움말]

핑백

덧글

  • 오자 2008/03/30 22:09 # 답글

    역사는 되풀이 되는 겁니다.. (뭠미..) 사는게 쉽지 않죠? ㅎㅎ
  • 지아 2008/03/31 18:09 # 답글

    다음에 어떤 상황이 되풀이 될까요? ㅋㅋ
덧글 입력 영역