2012-08-14 100 views
0

我是新来的C编程语言,我正在尝试学习计算给定数字的阶乘的递归。我的问题是调试printf陈述正在打印2,6,24,120,如果我输入'5'。如果将函数调用替换为相应的值并一次计算阶乘,它如何打印4次?调试阶乘递归

#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

了解如何使用环境的调试工具,然后通过你的代码的一步。您将学到的远不止是使用debug printf语句。 – 2012-08-14 01:14:36

回答

4

当您达到您的基本情况时,您return马上,而不是打印。

因此,您看到一个printf的情况:5,4,3,2,并且当函数传递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;