Java 递归详解

递归详解:

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。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值