java recursion_Java递归(Recursion)

递归就是方法体内调用它自身,这大家都知道,没什么意思。

还是先看段代码(转自其它资料):

public classRecursionDemo {public static int multiply(intn) {if (n == 1 || n == 0)returnn;else

return n * multiply(n - 1);

}public static voidmain(String[] args) {

System.out.println(multiply(5));

}

}

大家都能看出这是个阶乘的例子,是一个5的阶乘。

multiply(5)---->5*multiply(4);

multiply(4)---->4*multiply(3);

multiply(3)---->3*multiply(2);

multiply(2)---->2*multiply(1);

当调到multiply(1)的时候返回是1,这时候依次返回:

multiply(2)---->1*2,multiply(3)---->1*2*3....multiply(5)---->1*2*3*4*5

最后返回的是120。

从这个例子可以看出递归调用其自身,一层一层往下调用,直到有返回值,再一层一层返回。

不过要想深入了解递归,还得从栈的角度去看方法的调用

再看一段代码:

public voida(){}public voidb(){

System.out.println("Hello");

a();

System.out.println("boy");

}

方法b()调用了方法a(),这个时候程序不再是顺序执行,而是发生了跳转。CPU首先将下一条机器指令的地址以及相关参数信息压入栈中,然后程序跳转到a()的方法体中。当a()方法返回时,CPU会及时出栈操作,取出上一次存储的机器指令的地址以及参数信息,即System.out.println("boy")(System.out.println()不是一条机器指令,而是被翻译成多条机器指令)

递归方法也是一个道理,只不过,调用者与被调用者是同一个方法而已。

递归与循环有些相似,但又截然不同。循环没有方法间的调用关系,也就是没有指令地址的压栈、出栈,它仅仅是指令地址的改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值