如何解决递归调用中的堆栈溢出错误?
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】:是的,您遇到了溢出,因为您的递归堆栈变得非常深,输入量很大。这个函数没有理由需要递归,我建议使用循环实现迭代版本。
【讨论】:
以上是关于如何解决递归调用中的堆栈溢出错误?的主要内容,如果未能解决你的问题,请参考以下文章