面试
面试官:编程中尾递归算法讲下
程序员:没听说过
面试官:好,你可以回家等消息了(凉凉了)
程序员:回家后找了些尾递归资料,因为我是java开发,我就java去验证了下,结论很懵逼
递归
就是调用自己本身。
递归都必须至少有一个基本条件,在满足基本条件时跳出递归。
- 下面是计算阶乘递归小例子
递归缺点
- 每次调用都会压栈出栈,效率很低。
- 每次递归创建新的栈,递归深度太深时候,会导致栈溢出异常
尾递归
为了解决上面的效率和栈溢出问题而提出
概念:就是将递归语句写到最后一行且不参与任何计算。
每次递归将接受上次递归的传参,并将本次计算结果传给下次递归,但递归到达终结条件时候,其计算就是返回值。
递归和尾递归对比
尾递归省去了递归回退过程,不用在退回到上次递归作运算,
这样就节省了创建栈、压栈、出栈工作,性能得到提升。
java测试结果
遗憾
- java不支持尾递归优化,java里的尾递归和普通递归没什么区别。
总结
- java中能用迭代搞定的就不要用递归
程序员、java开发、软件开发、编程技术