递归调用太深,可能导致栈溢出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归调用太深,可能导致栈溢出相关的知识,希望对你有一定的参考价值。

参考技术A 栈溢出原因:
因为每调用一个方法就会在栈上创建一个栈帧,方法调用结束后就会弹出该栈帧,而栈的大小不是无限的,所以递归调用次数过多的话就会导致栈溢出。而递归调用的特点是每递归一次,就要创建一个新的栈帧,而且还要保留之前的环境(栈帧),直到遇到结束条件。所以递归调用一定要明确好结束条件,不要出现死循环,而且要避免栈太深。
解决方法:

当遇到递归时,可能出现栈空间不足,出现栈溢出,再申请资源扩大栈空间,如果空间还是不足会出现内存溢出oom。
合理的设置栈空间大小;
写递归方法注意判断层次;
能用递归的地方大多数能改写成非递归方式。

以上是关于递归调用太深,可能导致栈溢出的主要内容,如果未能解决你的问题,请参考以下文章

Java如何在不使用递归的情况下导致栈溢出?

Python 递归函数

线程栈溢出与线程属性

11-为什么局部变量是线程安全的?

python语法

堆栈溢出一般是由啥原因导致的?