이 문제는 함수를 되도는 프로세스(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)입니다.

 

따라서 이렇게 만들었습니다.

 

c17

그리고 두 프로시저를 돌려보니 같은 값이 나왔습니다.

 

되도는 프로세스는 C나 다른 언어에서도 연습을 하였고,

해당 함수가 원래 그러하기에 쉽게 만들었습니다만,

반복 프로세스를 만들 때 고민이 있었습니다.

for나 while이 아닌 프로시저를 다시 불러야했기 때문입니다.

따라서 본문에 나온 factorial과 피보나치 수열의 예제를 참조하였습니다.

 

하지만 문제점이 있습니다.

fi 프로시저 안에 f-iter 프로시저를 넣으면 파라메터로 n을 넣을 필요가 없습니다.

c18

이를 43쪽 주석으로 확인하였음에도 깜박한 것입니다.

이후 낭만고양이님의 글을 읽고 놓친 것을 확인하였습니다.

'SICP Exercise : 연습문제 1.11'

보시면 아시겠지만, 둘의 결과에는 차이가 없습니다.

 

성능 차이가 나는지는 잘 모르겠습니다.

다만 한 프로시저에 달린 여러 프로시저를 가두어 놓을 수 있고,

프로시저 정의를 짧게 줄여 쓸 수 있다는 좋은 점이 있다고 합니다.

- SICP 39쪽

그러니 후자의 것이 좋겠지요.^^

낭만고양이님께 감사의 인사를 드립니다.

 

 

참조

Structure and Interpretation of Computer Programs 2/E - Page 54

크리에이티브 커먼즈 라이센스
Creative Commons License

글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.

트랙백 주소 :: http://nosyu.pe.kr/trackback/1236

댓글을 달아 주세요

[로그인][오픈아이디란?]