C# 这个阶乘程序为什么有效?

C# 这个阶乘程序为什么有效?,c#,recursion,factorial,C#,Recursion,Factorial,这是教程Points C教程中显示的一个阶乘程序,我理解递归的基本概念,但我不确定它为什么在这种情况下工作。计划如下: public int factorial(int num) { /* local variable declaration */ int result; if (num == 1) { return 1; } else { result = factorial(num - 1) * num;

这是教程Points C教程中显示的一个阶乘程序,我理解递归的基本概念,但我不确定它为什么在这种情况下工作。计划如下:

public int factorial(int num)
{
    /* local variable declaration */
    int result;
    if (num == 1)
    {
        return 1;
    }
    else
    {
        result = factorial(num - 1) * num;
        return result;
    }
}

static void Main(string[] args)
{
    NumberManipulator n = new NumberManipulator();
    //calling the factorial method
    Console.WriteLine("Factorial of 6 is : {0}", n.factorial(6));
    Console.WriteLine("Factorial of 7 is : {0}", n.factorial(7));
    Console.WriteLine("Factorial of 8 is : {0}", n.factorial(8));
    Console.ReadLine();
}

在递归过程中,您将把num的值减少1,当递归因为num==1而停止时,您将返回递归并对每个值进行多重叠加

factorial(5)   
      -> factorial(4) * 5
           -> factorial(3) * 4
                    -> factorial(2) * 3
                             -> factorial(1)

在结束时,如果将执行:1*2*3*4*5=120

在一张纸上描绘它的运行过程。你会惊讶于用铅笔、纸和一点点努力就能理解的东西。我的意思是,实际上你只需要看5行。@takendark我在这里发布之前就做了,我不知道为什么它会起作用,我想这里会有人能帮上忙。但是一定要油嘴滑舌,而不是花几分钟来解释一个假定很简单的概念。作为补充说明,递归函数更适合于可以避免堆栈溢出的函数式编程语言-请参阅