递归与迭代

前言:每当我遇到一个问题想用递归进行求解时,心里总有另一个我在问:如果用迭代来解会不会更好?!通过一些问题的总结,后来发现这个纠结的答案取决于我们想做什么。递归方法有点类似于以镜像的方式来解决问题,一层一层的往下传递数据,然后在一层一层的往上返回值。

举个栗子:比如说求5的阶乘

画个图来直观的看一下用递归求解的过程:
递归与迭代
这就可以看出一个问题,每次递归调用都会增加开销。

小结一哈:

递归

(1)递归算法有递归情形和基本情形这两种,当到达基本情形时,递归就要终止,且每个递归必须终止于基本情形。
(2)每次递归都需要额外的空间用于栈帧开销,如果出现无穷递归,程序则可能耗尽内存,并出现栈溢出。
(3)一个递归算法可以通过使用栈代替递归函数的方式来实现,但通常是得不偿失的,这也就意味着任何能用递归求解的问题也能用迭代来求解。

迭代

(1)当循环条件为假时,迭代终止。
(2)迭代不同于递归,它不需要任何额外的空间开销
(3)由于迭代不需要额外的空间开销,所以一旦出现死循环,则程序会一直循环执行。
(4)通常,迭代方法会比递归方法更加有效,这是因为递归会有函数调用所带来的开销。