递归算法

递归算法
递归算法

1,递归介绍

1.递归的定义:函数调用其自身函数的编程技巧称为递归。

2.递归条件

(1)子问题必须与原始问题相同并且更简单;

(2)。不允许自己不受限制。必须存在一个出口,可以将其减少为非递归条件处理。

2,一个简单的递归示例

结运行果为:

结果为:120

这里递归调用的过程为:

递归调用实际上是函数调用,但是这些函数本身就是它们。记住一件事:谁打电话,谁回来。在上面的递归调用中,首先,我一直向下进行直到num==0,返回1,这是fun(0)函数的值,但是调用fun(0)函数就是fun(1)函数,因此fun(0)函数的值1返回到fun(1)函数(谁调用返回给谁),相同的原因始终返回到fun(5)函数,因为fun(5)函数在主函数中被调用,因此返回主函数一个值,该值为5!只要了解上面的图片,我几乎可以理解。

3,递归的基本原理

1.函数调用的每个级别都有其自己的变量。

2.每个函数调用将返回一次。当程序执行到递归级别的末尾时,它将移至上一个递归级别以继续执行。程序不直接返回main()中的初始调用部分,而是逐步返回每个递归级别,即从一个func()级别到调用它的级别。

3.在递归函数中,递归调用之前的语句和所有级别的被调用函数具有相同的执行顺序。

4.在递归函数中,递归调用后语句的执行顺序与每个被调用函数的执行顺序相反。

5.尽管每个递归级别都有其自己的变量。但是不会复制功能代码。功能代码是一系列计算机指令。函数调用从头开始执行相应功能的指令集。除了每次都创建变量之外,递归调用与循环语句非常相似。

6.递归函数必须包含可以终止递归调用的语句。

4,递归的优缺点

优点:

1.简单性

2.在遍历树的前顺序,中顺序和后顺序的算法中,递归的实现比循环的实现要简单得多。

缺点:

1.递归是函数调用本身,函数调用占用时间和空间:每个函数调用都需要在内存堆栈中分配空间以保存参数,返回地址和临时变量,而将数据推入堆栈和弹出数据。->效率

2.重复进行许多递归计算,因为其本质是将一个问题分解为两个或更多个小问题。如果在许多小问题中存在重叠的部分,则将重复计算,例如FibonacciFibonacci序列的递归实现。->效率

3.调用堆栈可能溢出。实际上,每个函数调用都会在内存堆栈中分配空间。但是,每个进程的堆栈容量是有限的。当调用级别太多时,

将超出堆栈的容量,从而导致堆栈溢出。->性能

相关主题
相关文档
最新文档