java 全局变量 跳出递归循环_面试官:编程中尾递归算法讲下 程序员:没听说过...

面试

面试官:编程中尾递归算法讲下

程序员:没听说过

面试官:好,你可以回家等消息了(凉凉了)

程序员:回家后找了些尾递归资料,因为我是java开发,我就java去验证了下,结论很懵逼

递归

就是调用自己本身。

递归都必须至少有一个基本条件,在满足基本条件时跳出递归。

  • 下面是计算阶乘递归小例子
3e73c6008bb64102e045e37cf666a429.png

递归缺点

  • 每次调用都会压栈出栈,效率很低。
  • 每次递归创建新的栈,递归深度太深时候,会导致栈溢出异常
20ab02db224241cfac69668c3b146232.png

尾递归

为了解决上面的效率和栈溢出问题而提出

概念:就是将递归语句写到最后一行且不参与任何计算。

每次递归将接受上次递归的传参,并将本次计算结果传给下次递归,但递归到达终结条件时候,其计算就是返回值。

递归和尾递归对比

尾递归省去了递归回退过程,不用在退回到上次递归作运算,

这样就节省了创建栈、压栈、出栈工作,性能得到提升。

java测试结果

97251cbb3d0a1f0499f7c5d4dd8e37fa.png
cea6d67a4cf00f7e44f5b5c3a1b52ee9.png

遗憾

  • java不支持尾递归优化,java里的尾递归和普通递归没什么区别。

总结

  • java中能用迭代搞定的就不要用递归

程序员、java开发、软件开发、编程技术

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值