关于递归的一些问题,虽然知道是会自己调用自己,但还是不明白啊( ᵒ̴̶̷̤໐ᵒ̴̶̷̤ )

img


谁能讲解一下这个递归的控制流程(电脑坏了,按开机键没反应,不然我直接设断点看了)

这就是计算阶乘的递归啊
从公式上理解一下:
n! = n*(n-1)!
这里n!和(n-1)!可以抽取出阶乘函数,即
int jc(int n)
{
if(n==1)
return 1;
return n * jc(n-1);
}
将函数阶乘看成感叹号,return语句就是n阶乘的算法公式。递归一直到1的阶乘等于1结束

factorial(5):
  factorial(4)*5
    factorial(3)*4
      factorial(2)*3
        factorial(1)*2
            return  1

从上到下挨个调用factorial,直到1后再从下往上返回。

“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出