赞
踩
关于递归,可能是很多小伙伴的噩梦,不明白为什么简简单单的两三行代码就能将问题给解决了?不过今天,看完了这篇文章,相信小伙伴们会对递归有个更加深入的了解。
这就是递龟(bushi)
递归在百度百科上的定义是指一种通过重复将问题分解为同类的子问题而解决问题的方法。也就是说,将一个大问题拆分为多个相同的小问题,再将小问题拆分为更多个相同的小小问题。
在编程中,递归就是方法自己调用自己。 调用A方法解决B问题,然后再在A方法中调用A方法解决B问题拆分出来的小问题。
比如在读书时候,每次考试坐在后排的同学可能会有这样的经历。考试结束后,监考老师说,将试卷从最后排(第七排)传到第一排,那么第七排的同学就会将试卷传给第六排,第六排传给第五排,这样子一直传下去,直到试卷到达第一排同学手中,这个时候就可以停止传递了……听完这个例子,相信小伙伴应该对递归有一个初步的理解了吧!
话不多说,先上实例:
在上面求和的例子中,我们可以看出,要求1到5的和,可以调用sum方法求和,然后再在sum方法内部调用sum方法求1到4的和……一次类推,直到sum方法的参数为1时,开始返回(可以看下图分析)
- //计算从一到十的加和
-
- public static void main(String args[]) {
- int n = 5;
- sum(n);
- }
-
- public static int sum(int n) {
- if(n == 1) {
- return 1;
- }
- return n + sum(n - 1);
- }
存在限制条件。
限制条件换句话说,就是问题的最小规模,当问题被拆分到什么程度时,问题可以开始被解决。如果不存在限制条件,那么问题就能被无限拆分。
每次调用都会越来越接近限制条件。
在学递归的时候,由于递归和循环很相似,所以很多人会将递归和循环进行对比。那我也跟风一下对比一下。
递归:递归的一个明显优点是代码量少,但是同时也比循环更难理解。如果使用不当,还可能出现栈溢出的现象。
循环:容易理解,可以用递归解决的基本都可以用循环解决。但是循环相对递归而言代码量多。
1.写一个传试卷的代码吧,尝试将试卷从第十排传到第一排
2.递归求n的阶乘
3.递归求n的斐波那契数
写在最后,对于初学者来说,理解递归只是第一步,更重要的是多做题才能加深印象和1了解!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。