2016 - 2024

感恩一路有你

递归一定要用到栈吗 java递归改为循环后为什么不会导致栈内存溢出?

浏览量:1992 时间:2021-04-01 12:48:07 作者:admin

java递归改为循环后为什么不会导致栈内存溢出?

我们知道,在编程中如果想让某个业务重复执行,一般有两种实现方式,分别是:递归和循环。在实际编码过程中,我们并不建议使用递归,反而是建议使用循环,这是为什么呢?

递归不当会导致内存溢出

其实不单单是Java,任何一款编程语言,如果递归写法不对,那就可能导致内存溢出!

学过Java的朋友肯定或多或少都听说和了解过栈内存和堆内存,程序在运行时,电脑操作系统会给每个进程都分配有堆内存、栈内存,所分配的堆栈内存都是有上限的,一旦超过了这个上限就会导致内存溢出现象。

为什么递归操作容易导致内存溢出呢?原因主要有以下几点:

  • 递归方法体内,如果终止递归的条件写错了,那可能会导致无限递归,最终导致内存溢出;

  • 即使递归方法及退出递归条件都是正常的,但若递归深度过深(递归次数过多),也会导致栈内存溢出!因为栈的出入规则是先入后出(先入栈的最后再出来),如果递归次数过多就会导致只入栈不出栈,最终栈内存溢出。

递归改循环可以降低内存溢出的可能

注意,递归写法改成循环写法可以降低内存溢出的风险,但这不是绝对的,如果循环写成了死循环一样会导致内存溢出。

递归写法改成循环写法的好处是,不会在短时间内出现栈的只入不出现象,所以可以规避栈内存溢出现象。

递归一定要用到栈吗 利用栈实现递归 栈实现递归的原理

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。