Java 递归详解

标签: Java
25人阅读 评论(0) 收藏 举报
分类:

递归详解:

1.递归一句话通俗讲就是一个方法自动重复调用自己的过程。

2.因为是重复调用自己了,所以看起来像一个循环,所以为了避免内存溢出系统崩溃,我们需要在方法里加一个返回值判断,用于递归循环的跳出。


下面用debug模式解释一下递归的实现原理:

首先是源码:

public class Demo8 {
	public static void main(String[] args) {          
            System.out.println(sum(1));  
	}  
/** 
* @param 求和方法 
*/  
	public static int sum(int num){  
		if(num == 100){  
			return 100;  
		}  
		return num + sum(num+1);  
		}  
	}  

我们在代码第5行调用sum实现求和1到100的值

在代码中11、12行是跳出递归的if,跳出的值是100。

代码中第14行就是递归的实现写法。


现在我们用debug模式分析一下:

第一步:


首先我们运行了debug调试,在debug中可以看到已经调用实例了一个sum的方法,可以在右边Value中看到方法里的参数值正是我们输入的1。现在进入到方法内部正执行到if判断中,由于num值不是100,所以没有执行if里的return 100; 程序将继续向下运行。

第二步:


我们可以看到代码里的第14行参数值 1 已经保存在num里,代码将继续运行到sum(num+1),我们将目光在看到上面debug调试框里可以看到又创建了一个sum方法,我们将目光看到右边Value里的值是2,那是因为num里的值自增+1的结果.所以当前num 的值等于2并且保存到第二个sum方法里的num里。

那么可以继续思考下去,后面继续是第二个sum方法里将会创建第三个sum方法,第三个sum方法里将会创建第四个sum方法,创建后自增的值都会保存到当前sum方法里的int num里。

让我们来看一下动图效果:



最终运行到100次后,if会将100的值返回,方法就不会继续执行到第14行,所以就不会在创建新的sum方法了。递归也就跳出了。让我们看一下动图:


我们可以看到当num里的值自增到100以后,if方法执行了,返回了一个100的值递归被直接跳出了,那么后续代码在执行什么呢?后续代码将继续执行每一个sum方法里的num值的相加,你也可以清楚的看到每一个被实例的sum方法被消除。直到全部相加完毕。最终的值我们可也可以在Value里或者控制台里看到是5050。

查看评论

java 递归详解

刚学java的时候通常难以理解递归程序设计的概念。递归思想之所以困难,原因在于它非常像是循环推理(circular reasoning)。它也不是一个直观的过程;当我们指挥别人做事的时候,我们极少会递...
  • qq_14996421
  • qq_14996421
  • 2016-04-29 11:50:57
  • 3981

java中递归用法详解

  • 2015年10月11日 18:07
  • 29KB
  • 下载

Dom动态递归解析

package xml;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory...
  • marskbt
  • marskbt
  • 2008-06-24 23:54:00
  • 333

简单例子讲解普通递归和尾递归

作者:Coke 链接:http://www.zhihu.com/question/20761771/answer/92233964 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 这是尾递归...
  • u014563989
  • u014563989
  • 2016-11-04 18:30:32
  • 723

java数据结构与算法之递归思维(让我们更通俗地理解递归)

汉诺塔的问题 数学归纳法的思维 递归算法的思考方式 斐波那契数列中的递归思想 再谈递归图形...
  • javazejian
  • javazejian
  • 2016-12-12 11:50:26
  • 12206

java树结构递归里面详细说明

  • 2011年04月26日 07:31
  • 37KB
  • 下载

Algorithms - 递归(recursion) 详解 及 代码

递归(recursion) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/17099693 递归(recu...
  • u012515223
  • u012515223
  • 2013-12-03 18:32:20
  • 2572

Java递归思想分析

递归时要注意形成一层一层的结构,一般会采取某种判断的方法,如if,如果不满足要求,那就调用自身进行递归,此时应注意找出上下层之间的联系(各层相同逻辑的部分),让运算进入下一层,这样形成上一层调用下一层...
  • a_good_programer
  • a_good_programer
  • 2016-11-22 22:56:15
  • 2991

java的递归实现原理

打印5的阶乘 5! 1.普通方法实现 package cn.itcast.digui; public class DiGuiDemo { public static void main(Str...
  • u014010769
  • u014010769
  • 2015-08-10 13:12:10
  • 4986

快速排序 的原理及其java实现(递归与非递归)

快速排序 的原理及其java实现(递归与非递归)
  • mine_song
  • mine_song
  • 2017-03-20 09:25:49
  • 730
    个人资料
    持之以恒
    等级:
    访问量: 3596
    积分: 480
    排名: 10万+
    最新评论