也说递归

 

     递归算法是程序员的最重要的基本功之一,也是相对比较难理解的一种;尤其是当今框架盛行,自己不愿/不需要思考的编程年代,递归是检验程序员级别的方法之一。其实不要怕,它很简单,就是方法调用方法而已,只不过方法时调用自己而已(或是曲折调自己),不就是如此吗?

 

     写出递归的程序需要什么?抽象!对,就是抽象,不要以为抽象是面向对象编程的专有名词。碰到问题时先不要考虑具体的细节,陷入森林之中,先找规律,从具体问题中找出一般规律。比如汉诺塔游戏,如果你按常规思路,按步骤一步一步思考,你根本就没有出路,而如果你抽象出把最上面的盘子移到第二根柱子上,然后把剩下的移到第三个柱子上,最后把最上面的盘子也移到第三根柱子上,这个问题就非常简单、明了了。

 

开始写递归时,第一要考虑的是什么?是出口条件,就是什么情况下能得到最终结果并回朔。这个首先要考虑的。这样有三个好处,第一,简单,因为出口条件往往是简单的;第二,得到递归方法的参数,那些参数是需要递归传进来的,你就分析清楚了;第三,递归的其他逻辑部分,也就有了努力的方向,知道递归要什么参数,知道怎么样正确跑出递归。所以出口条件是最重要的,如果这个还没考虑清楚,说明你问题还没有理顺,先不要动手。

 

递归传参数时,需要注意什么?如Java是面向对象,有传值,传引用之别;如果你传个简单类型(包括String),那不要担心递归中,这个值会变,如果是对象(比如你可能传过List,对吗),这个就要注意了。当然传什么没有什么好不好的问题,要看实际需要。

 

递归还需要注意什么,超级复杂的递归算法(一般我们不会碰到),要注意栈空间足够,因为如果一个方法调需要用自己10W次,要保存多少信息到栈中? 提醒而已,就算碰到也会有异常提示。改改JVM参数即可。

 

我们需要递归吗?需要,也许不经常需要,但是需要时会让你不知所错;所以递归是需要,不常需要但很重要。

 

好好学习,天天向上,打好基础,万剑归尊。

----------------------------------------------------------------------

张瑜,Mybeautiful, zhangyu0182@sina.com

 

 

推荐阅读:

Java学习这七年

如何阅读源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值