c·c++/c 프로그래밍

재귀함수(순환호출) 이해하기

바로이순간 2012. 5. 14. 10:56

재귀함수 이해하기


#include<stdio.h>

int A(int c) {

  int a;

 

  if(c==1) {  // [가]

    printf("1");

    return 1;

  }

  else {   // [나]

    a=c*A(c-1);

  }

 // [다]

  printf("x%d",c);

  return a;

}


int main(void) {

  int a;


  printf("숫자 입력 :");

  scanf("%d", &a);


  printf("%d", A(a));


  return 0;

}


main에서 printf문 안에서 A(5)를 호출합니다.  [E]

A(5) 가 시작합니다.

....c의 값은 5입니다. [나]를 실행합니다.

....a=c*A(c-1); 에서 먼저 A(c-1)을 호출하여 값을 구합니다.   [D]

....A(4) 가 시작합니다.

........c'의 값은 4입니다. [나]를 실행합니다.

........a'=c'*A(c'-1)에서 먼저 A(c'-1)을 호출하여 값을 구합니다.   [C]

........A(3) 이 시작합니다.

............c"의 값은 3입니다. [나]를 실행합니다.

............a"=c"*A(c"-1)에서 먼저 A(c"-1)을 호출하여 값을 구합니다.  [B]

............A(2) 가 시작합니다.

................c'"의 값은 2입니다. [나]를 실행합니다.

................a'"=c'"*A(c'"-1)에서 먼저 A(c'"-1)을 호출하여 값을 구합니다. [A]

................A(1)이 시작합니다.

....................c""의 값은 1입니다. [가]를 실행합니다.

....................1을 출력합니다. 그리고 1을 반환합니다. [A]로 돌아 갑니다.

................a'"=c'"*1을 구합니다.   a'"=2*1이 되어 2가 됩니다.

................[다]를 실행합니다.

................x2를 출력합니다. 그리고 2를 반환합니다.  [B]로 돌아 갑니다.

............a"=c"*2 이고 c"이 3이므로 a"은 6이 됩니다.

............[다]를 실행합니다.

............x3을 출력합니다. 그리고 6을 반환합니다.  [C]로 돌아갑니다.

........a'=c'*6 이고 c'이 4이므로 a'은 24가 됩니다.

........[다]를 실행합니다.

........x4를 출력합니다. 그리고 24를 반환합니다.  [D]로 돌아갑니다.

....a=c*24이고 c는 5이므로 a는 120이 됩니다.

....[다]를 실행합니다.

....x5를 출력합니다. 그리고 120을 반환합니다. [E]로 돌아갑니다.


메인으로 돌아와서 120을 출력합니다.

'c·c++ > c 프로그래밍' 카테고리의 다른 글

몇가지 함수들  (0) 2012.05.14
C컴파일러가 양수와 음수를 메모리에 저장하는 방식 그 이유  (0) 2012.05.14
개행없이 입력받기  (0) 2012.05.14
gotoxy 함수  (0) 2012.05.14
피보나치 수열  (0) 2012.05.11