Open utterances-bot opened 1 year ago
안녕하세요 sicp를 공부하고 있는 초보 개발자입니다. 저도 같은 아이디어로 풀긴 했는데 0일 때 왜 동작이 잘못되는지 여쭤봐도 될까요? else가 붙으면 또 되는 것 같은데 어디가 문제인지를 모르겠어서요 염치불구 물어봅니다.
안녕하세요 sicp를 공부하고 있는 초보 개발자입니다. 저도 같은 아이디어로 풀긴 했는데 0일 때 왜 동작이 잘못되는지 여쭤봐도 될까요? else가 붙으면 또 되는 것 같은데 어디가 문제인지를 모르겠어서요 염치불구 물어봅니다.
(mult-iter a b temp)의 정의에서, b의 값에 따라 3가지의 갈래로 나뉘게 됩니다.
b 가 0인 경우 (even? b)는 참을 반환합니다. 이때 a를 2배 해주는 동시에, b를 0.5배 해주게되는데, 0을 0.5배 해도 값이 같기 때문에 문제가 생깁니다.
만약 이 프로시저를 올바르게 고치고 싶다면,
(define (mult-iter a b temp)
(cond ((= b 0) 0)
((= b 1) (+ a temp))
((even? b) (mult-iter (double a) (halves b) temp))
(mult-iter a (- b 1) (temp + a))))
이런 식으로 case를 추가해 주어야 합니다.
안녕하세요 sicp를 공부하고 있는 초보 개발자입니다. 저도 같은 아이디어로 풀긴 했는데 0일 때 왜 동작이 잘못되는지 여쭤봐도 될까요? else가 붙으면 또 되는 것 같은데 어디가 문제인지를 모르겠어서요 염치불구 물어봅니다.
(mult-iter a b temp)의 정의에서, b의 값에 따라 3가지의 갈래로 나뉘게 됩니다.
- b가 1 인경우
- b가 짝수인 경우
- 둘 중 아무것도 아닌 경우
b 가 0인 경우 (even? b)는 참을 반환합니다. 이때 a를 2배 해주는 동시에, b를 0.5배 해주게되는데, 0을 0.5배 해도 값이 같기 때문에 문제가 생깁니다.
만약 이 프로시저를 올바르게 고치고 싶다면,
(define (mult-iter a b temp) (cond ((= b 0) 0) ((= b 1) (+ a temp)) ((even? b) (mult-iter (double a) (halves b) temp)) (mult-iter a (- b 1) (temp + a))))
이런 식으로 case를 추가해 주어야 합니다.
감사합니다 글 보고 도움 많이 받고 있습니다.
SICP 연습문제 1.17 & 1.18 친절한 풀이 | 이유진 아카이브
곱셈 프로시저의 성능 높이기
https://studyingeugene.github.io/sicp/chapter-1/exercise-1-17/