이 문제는 함수를 되도는 프로세스(recursive process)와
반복 프로세스(iterative process)가 되도록 프로시저를 만드는 문제입니다.
먼저 한글판에 오타가 있습니다.
'f(n) = (n-1) + 2f(n-2) + 3f(n-3)'
위의 식을 이렇게 고쳐야합니다.
'f(n) = f(n-1) + 2f(n-2) + 3f(n-3)'
즉, (n-1)이 아니라 f(n-1)입니다.
따라서 이렇게 만들었습니다.

그리고 두 프로시저를 돌려보니 같은 값이 나왔습니다.
되도는 프로세스는 C나 다른 언어에서도 연습을 하였고,
해당 함수가 원래 그러하기에 쉽게 만들었습니다만,
반복 프로세스를 만들 때 고민이 있었습니다.
for나 while이 아닌 프로시저를 다시 불러야했기 때문입니다.
따라서 본문에 나온 factorial과 피보나치 수열의 예제를 참조하였습니다.
하지만 문제점이 있습니다.
fi 프로시저 안에 f-iter 프로시저를 넣으면 파라메터로 n을 넣을 필요가 없습니다.

이를 43쪽 주석으로 확인하였음에도 깜박한 것입니다.
이후 낭만고양이님의 글을 읽고 놓친 것을 확인하였습니다.
보시면 아시겠지만, 둘의 결과에는 차이가 없습니다.
성능 차이가 나는지는 잘 모르겠습니다.
다만 한 프로시저에 달린 여러 프로시저를 가두어 놓을 수 있고,
프로시저 정의를 짧게 줄여 쓸 수 있다는 좋은 점이 있다고 합니다.
- SICP 39쪽
그러니 후자의 것이 좋겠지요.^^
낭만고양이님께 감사의 인사를 드립니다.
참조
Structure and Interpretation of Computer Programs 2/E - Page 54
- SICP Exercise 연습문제 1.17, 1.18 (0)2008/01/14
- SICP Exercise 연습문제 1.16 (0)2008/01/13
- SICP Exercise 연습문제 1.14 (4)2008/01/08
- SICP Exercise 연습문제 1.11 (0)2008/01/04
- SICP Exercise 연습문제 1.9 (7)2008/01/04
- SICP Exercise 연습문제 1.8 (4)2007/12/18
- SICP Exercise 연습문제 1.7 (4)2007/12/18
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.








댓글을 달아 주세요