返回目录:office365
递归是在其函数体中调用自身的函数。执行递归函数将重复调用自身,每次调用将进入一个新层。递归函数必须有结束条件。
当函数继续递推直到遇到墙并返回时,墙即为结束条件。
因此,递归有两个元素,即结束条件和递推之间的关系。
递归有两个基本元素:
(1) 边界条件:确定递归何时结束,也称为递归退出。
(2) 递归模式:如何将大问题分解为小问题,也称为递归体。递归函数只有使用这两种元素,才能在有限次数的计算后获得结果
在递归函数,调用函数和调用函数中是相同的函数。应该注意的是,调用级别为递归函数。如果主函数调用递归函数被称为层0,则在进入函数后,第一个递归调用本身被称为层1调用;从第一层递归调用自身称为第一层+1。相反,退出层I+1调用应返回到层I。
一个递归函数的调用过程类似于多个函数的嵌套调用,只是调用函数和be调用函数是同一个函数。为了确保递归函数的正确执行,系统需要设置工作栈。具体来说,递归调用的内部执行过程如下:
(1) 在移动开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址;
(2) 在每次递归调用之前,堆叠递归函数的值参和局部变量的当前值以及调用后的返回地址;
(3) 在每次递归调用之后,堆栈顶部元素
扩展数据:
递归是一个直接或间接调用自身的函数。此调用方法称为递归调用。坦率地说,它仍然是一个函数调用。因为它是一个函数调用,所以有一个不变的原则:所有被调用的函数都将创建一个副本来为调用方服务,而不受其他函数的影响。
您的ff函数将拥有与递归数量相同的副本,然后使用内存堆栈管理反向退出。最好能找到有关“堆栈”的信息。这很容易。它就像一个弹匣,先进后出。
从某种意义上说,这是错误的,因为正如刚才所说的,一旦调用它,它将复制内存中代码的一个副本,然后在调用它时复制另一个副本。换句话说,您可以理解同一函数的多个调用,同时调用多个不同的函数,这将更简单。
此外,为什么要退出=1和=0。递归,有必要注意死递归,即函数本身进入无限调用的状态,无休止地消耗内存和其他资源,这是编程中的一大禁忌。
但对于所有递归函数,必须有代码可以在某个地方返回前一个函数,否则递归将消亡。在ff函数中,else是要返回的出口。你可以这样想。如果没有If判断,什么时候完成递归?ff它是否总是称自己为。
因为一旦在函数a中调用函数B(或自身),a中的代码将在调用位置停止,并转到B来执行它。类似地,如果B是调用函数C,则B在调用执行C的位置停止。如果进行了无限次调用,则程序将永远不会结束。
当然,也有a调用B然后继续自己的代码的情况,不管B的生死。这不在我们讨论的范围内,因为它涉及另一种编程方法:多线程。
参考资料: