递归和迭代----算法中的递归和迭代
递归
- 递归就是指程序调用自身的编程思想,即一个函数调用本身
- 递归的使用能把一个复杂的问题,转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少编程中的代码量
迭代
- 迭代是利用已知的变量值,根据递推公式不断演进得到变量的一个新值的编程思想
二者比较
-
递归中一定有迭代,但是迭代中不一定有递归;大部分可以相互转换。
-
相对来说,能用迭代不用递归(因为递归不断调用函数,浪费空间,容易造成堆栈溢出)
-
迭代难以理解,但是其执行过程中效率高;递归则易于理解,但是其执行效率相对于迭代低
-
在设计中,从效率考虑,如果能用迭代的话,就用迭代;但是从程序算法的理解来看,递归更容易理解。
二者优缺点
递归
- 优点:
-
能用有限的循环语句来实现无限集合
-
递归实现的代码易于理解,利于其他人对代码的解读
-
能将大问题转化成小问题,减少编程中的代码量
- 缺点:
-
递归的过程中,会不断调用自身,会造成空间的浪费
-
调用次数过多后,容易造成堆栈溢出
迭代
- 优点:
-
迭代的算法执行效率高,运行花费的时间只随循环的增加而增加
-
迭代没有额外开销,不会有过多的内存消耗
- 缺点:
-
迭代实现的代码难以理解
-
代码的设计不如递归设计的代码简洁
-
编写复杂问题,比如图、表、二叉树……等的问题时,代码逻辑不易想出,实现较为困难