재귀함수 이해하기
#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을 출력합니다.