如何解决递归调用中的堆栈溢出错误?

Posted

技术标签:

【中文标题】如何解决递归调用中的堆栈溢出错误?【英文标题】:How to solve a stack overflow error in recursive call? 【发布时间】:2022-01-05 21:44:00 【问题描述】:
import java.util.Scanner;

public class Task5 

    private static void stack(int x) 
        if (x == 0) return;
        stack(x - 1);
        if (x % 35 == 0) 
            System.out.println();
        
        System.out.print(x + " ");
    

    public static void main(String[] args) 

        Scanner sc = new Scanner(System.in);
        System.out.print("Enter number: ");
        int x = sc.nextInt();
        stack(x);
    

任何大于 9200 的数字都会导致堆栈溢出错误。是不是因为一个递归调用循环了太多次?

【问题讨论】:

为了避免堆栈溢出,您需要以不同的方式实现此功能。递归只是不会在一段时间后削减它。 所以如果多次调用递归最终会导致堆栈溢出错误? 正确。这是递归的一个基本问题,无法改变。 这能回答你的问题吗? What is a ***Error? 感谢您的回答。如何避免 SO 错误对我来说是一项功课。必须用标准的for循环来解决。 【参考方案1】:

是的,您遇到了溢出,因为您的递归堆栈变得非常深,输入量很大。这个函数没有理由需要递归,我建议使用循环实现迭代版本。

【讨论】:

以上是关于如何解决递归调用中的堆栈溢出错误?的主要内容,如果未能解决你的问题,请参考以下文章

递归 - 堆栈溢出错误

如何解决栈溢出

怎么防止堆栈溢出

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

由于递归方法调用导致 Java 堆栈溢出

Java 中的自调用函数中的堆栈溢出错误(岛数)