2012-08-14 2 views
0

저는 C 프로그래밍 언어에 익숙하지 않아 주어진 숫자의 계승 계산을위한 재귀를 배우려고합니다. 제 질문은 디버그입니다 printf 진술을 인쇄하는 경우 2,6,24,120 입력하면 '5'. 함수 호출이 해당 값으로 대체되고 한 번에 계승을 계산하면 어떻게 4 회 인쇄됩니까?Factorial Recursion 디버깅

#include<stdio.h> 
#include<stdlib.h> 

int factorial(int n); 

int main() 
{ 
     int num; 
     int fact_val; 
     printf("Enter the number for which you are going to compute the factorial:"); 
     scanf("%d",&num); 

     fact_val=factorial(num); 

     printf("The factorial of the given number is %d\n",fact_val); 

     return 0; 
} 

int factorial(int n) 
{ 
     int factorial_val; 
     if(n==1) 
     return 1; 
     else 
     { 
       factorial_val=factorial(n-1)*n; 
       printf("Debugger-%d\n",factorial_val); 
     } 
     return factorial_val; 
} 
+0

사용자 환경의 디버깅 기능을 사용하고 코드를 단계별로 알아보세요. 디버그 printf 문을 사용하는 것보다 훨씬 많은 것을 배우게됩니다. –

답변

4

기본 케이스에 도달하면 즉시 인쇄하지 않고 return입니다.

5, 4, 3, 2의 경우 printf이 표시되고 기능이 1을 넘으면 값이 인쇄되지 않습니다. 즉 return입니다.

은 또한 당신은 당신이 인쇄 전에 재귀, 그래서 경우는 순서대로, 적어도 최초의 인쇄 : 첫 번째 인쇄 당신이 까지 모든 방법을에 반복 한 후에 만 ​​발생합니다. 따라서 2, 6, 24, 120을 볼 수 있습니다. 현재 재귀에서 돌아 왔을 때만 중간 값이 인쇄됩니다. 재귀 아래

쓰기는 명확하게하기 :

5 -> recurse with 4: 
    4 -> recurse with 3: 
     3 -> recurse with 2: 
      2 -> recurse with 1: 
       1 -> base case, just return... 
      printf (1 * 2) = 2; 
     printf (2 * 3) = 6; 
    printf (6 * 4) = 24; 
printf (24 * 5) = 120;