来源:我的博客 1.什么是递归?使用递归时需要注意什么
2.头递归和尾递归
3.在什么时候才会用递归来解决问题?
4.通过例子来进一步理解递归
1.什么是递归?使用递归时需要注意什么
递归用自己的话来讲就是:自己调用自己的方法,在执行过程中,本次执行还没有结束直接进入下一次的调用,那么前一个方法会暂停执行(在执行下一个调用的时候,那么在执行前会保存之前的信息在栈中,方法执行完后,计算机再根据这些信息返回正确的位置)就这样不断的调用自己,直到达到所给的限制条件。
在递归的时候,必须要有限制条件,有些地方把这种条件叫做:递归头,如果没有递归头,则程序会陷入死循环。(实际递归挺耗时,费内存的)
2.头递归和尾递归
头递归:递归发生在函数处理其他代码之前
尾递归:递归发生在函数处理其他代码之后
例如:现在有5个人排成一排(5个人的代码就叫做1,2,3,4,5),每个人手里都有一定的现金(分别是2,4,6,3,8),现在我们想要知道5个人一共有多少现金,那么我们可以有两种方法实现:
采用头递归的方法:即先不处理问题,让所有人都知道问题是什么,在所有人知道问题后再一一处理:
1——2:5个人一共有多少钱----------2——3:5个人一共有多少钱----------2——3:5个人一共有多少钱-------- 3——4:5个人一共有多少钱-------------4——5:5个人一共有多少钱 (此时并没有处理问题)
5——4:我现在有8元 -----------4——3:我和5一起有11元------------3——2:我和4,5一起有17元----------2——1:我和3,4,5一起有21元 1:最后得出的结果就是:5个人一起有23元的现金
采用尾递归的方法:先处理问题,然后所有都会知道最终结果
1——2:我有2元 -------------2——3:我和1一起有6元------------3——4:我和1,2一起有12元----------4——5:我和1,2,3有15元---------5:我们一起有23元现金
5——4:我们5个人一共有23元现金---------4——3:我们5个人一共有23元现金--------------3——2:我们5个人一共有23元现金-------------2——1:我们5个人一共有23元现金
cf:由此我们可以看出他们之间的区别:头递归(依我个人来讲)就是先递归,先把自己调用了,再接着处理问题 尾递归就是后面再调用自己,先把问题处理了,再调用自己
3.在什么时候才会用递归来解决问题?
一般能够不用递归解决的问题就尽量不要用递归,毕竟递归浪费内存,耗时,但是有时候递归也不得不用
4.通过例子来进一步理解递归