C++ 阶乘返回语句是如何工作的?

C++ 阶乘返回语句是如何工作的?,c++,recursion,C++,Recursion,在阶乘函数中执行的最后一个return语句是return 1;为什么它返回正确的值而不是1 #include <iostream> using namespace std; unsigned int factorial(unsigned int); int main () { unsigned int a=4; cout<<factorial(a); return 0; } unsigned int factorial(unsigned

在阶乘函数中执行的最后一个return语句是return 1;为什么它返回正确的值而不是1

#include <iostream>
using namespace std;

unsigned int factorial(unsigned int);

int main ()
{
    unsigned int a=4;
    cout<<factorial(a);

    return 0;
 }

 unsigned int factorial(unsigned int a)
  {
      if (a==0)
            return 1;   
      else
        return a*(factorial(a-1));
   }
语句返回1;是对阶乘函数的递归调用中的停止条件

检查有关递归概念的链接:

简言之: 从factorial 3这样的调用开始,调用顺序为:

--> return 3 * factorial(2)
--> return 3 * 2 * factorial(1)
--> return 3 * 2 * 1 * factorial(0)
& Finally

--> return 3 * 2 * 1 * 1 which is equal to 6

因为对factorial的调用会导致一系列的factorial调用相乘,最后一个是factorial0,返回1

因此,factorial4的计算如下:

factorial (4) = 4 * (factorial(3))
factorial (3) = 3 * (factorial(2))
factorial (2) = 2 * (factorial(1))
factorial (1) = 1 * (factorial(0))
factorial (0) = 1
综合起来:

factorial (4) = 4 * (3 * (2 * (1 * 1) ) )
也许这有帮助

factorial(5)
   calls factorial(4)
      calls factorial(3)
         calls factorial(2)
            calls factorial(1)
            returns 1
         returns 2*1 (equals 2)
      returns 3*2 (equals 6)
   returns 4*6 (equals 24)
returns 5*24 (equals 120)
正如您所看到的,返回1的是第一个return语句,而不是最后一个

为什么它返回正确的值而不是1

#include <iostream>
using namespace std;

unsigned int factorial(unsigned int);

int main ()
{
    unsigned int a=4;
    cout<<factorial(a);

    return 0;
 }

 unsigned int factorial(unsigned int a)
  {
      if (a==0)
            return 1;   
      else
        return a*(factorial(a-1));
   }
嗯。。。也许是因为

return a * factorial(a - 1);

阶乘函数调用自身,直到a==0。factorial确实停止调用自身并返回1,但它不会立即返回main,因为它需要首先返回对自身的所有调用

调用自身的函数称为递归函数。请参阅此链接:

或此链接:


'阶乘函数中执行的最后一个return语句是return 1;'这种说法是不正确的。你凭什么认为这是真的?我猜你正在与递归的概念作斗争。true语句将是第一个返回语句为1,最后一个返回语句是正确的值。