递归C:堆栈中发生了什么?

递归C:堆栈中发生了什么?,c,recursion,stack,C,Recursion,Stack,我是递归的初学者,我编写了这段代码 #include <stdio.h> int ft_recursive_factorial(int nb) { if (nb > 1) { return(nb * ft_recursive_factorial(nb - 1)); } return(1); } int main() { printf("%d\n",ft_recursive_factorial(3)); retu

我是递归的初学者,我编写了这段代码

#include <stdio.h>

int ft_recursive_factorial(int nb)
{
    if (nb > 1)
    {
        return(nb * ft_recursive_factorial(nb - 1));
    }
    return(1);
}

int main()
{
    printf("%d\n",ft_recursive_factorial(3));
    return(0);
}


我认为代码是正确的,但我不能理解堆栈中发生了什么。。。 在我看来,这种情况正在发生:

|堆栈|
|返回(1*ft_递归_阶乘(1-1))|
|返回(2*ft_递归_阶乘(2-1))|
|返回(3*ft_递归_阶乘(3-1))|
在这个模式中,由于返回答案(在我看来),代码将停止在返回(1*ft\u递归\u阶乘(1-1))


有人能解释一下堆栈中发生了什么吗?请。

要真正把它说清楚,应该是这样的:

In main(), calling ft_recursive_factorial(3)
  In ft_recursive_factorial(nb == 3)
  nb > 1 is true, so
  Calling ft_recursive_factorial(2) from ft_recursive_factorial(3) 
    In ft_recursive_factorial(nb == 2)
    nb > 1 is true, so
    Calling ft_recursive_factorial(1) from ft_recursive_factorial(2) 
      In ft_recursive_factorial(nb == 1)
      nb > 1 is false, so 
      return 1
    back in ft_recursive_factorial(2), receiving result 1 from recursive call
    return nb(2) * recursive result(1) i.e. 2 to caller
  back in ft_recursive_factorial(3), receiving result 2 from recursive call
  return nb(3) * recursive result(2) i.e. 6 to caller
back in main(), receiving result 6.

这回答了你的问题吗?否。在模式中,代码将在返回(1)时停止,因为它与前面的条件不匹配。
In main(), calling ft_recursive_factorial(3)
  In ft_recursive_factorial(nb == 3)
  nb > 1 is true, so
  Calling ft_recursive_factorial(2) from ft_recursive_factorial(3) 
    In ft_recursive_factorial(nb == 2)
    nb > 1 is true, so
    Calling ft_recursive_factorial(1) from ft_recursive_factorial(2) 
      In ft_recursive_factorial(nb == 1)
      nb > 1 is false, so 
      return 1
    back in ft_recursive_factorial(2), receiving result 1 from recursive call
    return nb(2) * recursive result(1) i.e. 2 to caller
  back in ft_recursive_factorial(3), receiving result 2 from recursive call
  return nb(3) * recursive result(2) i.e. 6 to caller
back in main(), receiving result 6.