递归循环(C#)

ray*_*ran 0 c# c++ recursion loops factorial

有人可以向我解释一下吗?我写了一个函数来计算C#中这样的数字的阶乘:

public int factorial(int input)
{
    if (input == 0 || input == 1)
        return 1;
else
{
    int temp = 1;
    for (int i = 1; i <= input; i++)
        temp = temp * i;
    return temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我发现一些C++代码(我真的不知道任何C++ btw)使用递归循环找到一个阶乘:

int factorial(int number) {
 int temp;
 if(number <= 1) return 1;
 temp = number * factorial(number - 1);
 return temp;
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释它是如何工作的吗?谢谢.

Jon*_*eet 6

好了,它使用的事实,factorial(n)n * factorial(n - 1)有一个基本情况n = 1.

例如:

factorial(5) = 5 * factorial(4)
             = 5 * 4 * factorial(3)
             = 5 * 4 * 3 * factorial(2)
             = 5 * 4 * 3 * 2 * factorial(1)
             = 5 * 4 * 3 * 2 * 1
Run Code Online (Sandbox Code Playgroud)

实现只使用这个递归定义.