0

我是 C 编程语言的新手,我正在尝试学习递归来计算给定数字的阶乘。我的问题是如果我输入“5” ,调试printf语句正在打印。2,6,24,120如果函数调用被替换为相应的值并一次计算阶乘,它如何打印 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;
}
4

1 回答 1

4

当你达到你的基本情况时,你return立即而不是打印。

因此,您会看到一个printf案例:5、4、3、2,并且当函数传递 1 时,不会打印该值:return而是您。

此外,您在打印之前进行递归,因此案例按顺序打印,最少优先:第一次打印仅在您一直递归到2之后发生。因此您会看到: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;
于 2012-08-14T01:05:58.110 回答