一个函数调用其本身,此调用过程为递归(recursion)。
举个栗子:
输出如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9UFVOFTWq5kMJpXTmZEWjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zM2gDMxkjM2EDNwIDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
每级递归都使用其私有变量(如例子中的n)
每次函数调用都返回前一级(调用他那级)递归
递归函数中,位于递归调用前的语句和各级被调函数具有相同执行顺序
递归函数中,位于递归调用后的语句和各级被调函数具有相反执行顺序
每级递归会从头执行而不是复制其函数代码,所以一般可代替循环语句。
递归函数必须包含可以终止递归调用的语句(如if)。
最简单的递归形式。
把递归调用语句放在函数结尾(return语句之前)。
计算n的阶乘
将一个整数转换成二进制形式。
<dl></dl>
<dt>优点</dt>
<dd>算法简单</dd>
<dt>缺点</dt>
<dd>占内存,难于阅读和维护</dd>
举个栗子:斐波那契数列:第一、二个数字都是1,而后续的每个数字是其前两个数字之和。1、1、2、3、5、8、13……
双重递归。
致命弱点:每级调用变量数以指数递增!
main( )也可以被自身递归调用或其他函数调用,尽管用得少。