연습문제 1.9
 

(Language : xml)
  1. (define (+ a b)
  2.     (if (= a 0)
  3.         b
  4.         (inc (+ dec a) b))))
  5.  
  6. (define (+ a b)
  7.     (if (= a 0)
  8.         b
  9.         (+ (dec a) (inc b))))

 같은 프로시져가 있을 때, 각각의 프로시저가 (+ 4 5)를 계산한다고 한다면 반복 프로세스인지 재귀 프로세스인지를 알아보는 문제이다.

 솔직히 처음에 이 문제를 봤을때…둘다 재귀인 줄 알았다.

 프로시저가 끝나기 전에 자신을 호출하고 호출하고….하지만 이것은 C언어가 아니었다.

 역시나 한참을 헤매이다…노슈님의 블로그에서 해답을 찾았다.

 관련 링크 : http://nosyu.egloos.com/4058585

  첫 번째 프로시저의 실행 순서이다.

(Language : text)
  1. (+ 3 4)
  2.  
  3. (inc (+ 2 4))
  4. (inc (inc (+ 1 4)))
  5. (inc (inc (inc (+ 0 4))))
  6. (inc (inc (inc 4)))
  7. (inc (inc 5))
  8. (inc 6)
  9.  
  10. 7

 두 번째 프로시저의 실행 순서이다.
 

(Language : text)
  1. (+ 3 4)
  2. (+ 2 5)
  3. (+ 1 6)
  4. (+ 0 7)
  5.  
  6. 7

 역시나 실행 순서를 보면 한눈에 들어온다.

 즉, 첫 번째 프로시저는 재귀 프로세스(되도는 프로세스)이고, 두 번째 프로세스는 반복하는 프로세스이다.

사용자 삽입 이미지

Tags: , ,

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.