首页 > 解决方案 > 在java中设置最大递归深度

问题描述

我知道这个问题已经通过多种方法得到了回答:

这些方法很棒,但我知道我的代码存在问题,我想专门限制(例如 5 个小数字)递归深度,以测试这是否是问题所在。
有没有像sys.setrecursionlimitpython中的方法?

标签: javarecursionintellij-idea

解决方案


执行此操作的侵入性最小的“手动”方法(也是最 hacky)可能是在您的类中创建一个存在递归问题的静态变量。当你进入递归方法时,使用它来计算递归深度(通过加法或减法),当你退出时,反转你在进入时所做的事情。

这不是很好,但它比尝试设置堆栈深度要好得多(Java 中几乎任何系统调用都会在不眨眼的情况下通过 5 级堆栈)。

如果您不使用静态变量,您最终可能不得不通过相当多的类传递堆栈深度变量,这对您的其余代码非常具有侵入性。

作为替代方案,我建议您让它“正常”失败并抛出异常,然后对堆栈跟踪进行一段时间的思考——它们确实提供了丰富的信息,并且可能会比其他任何事情更快地引导您找到问题的根源。

static int maxDepth = 5;
public void recursiveMethod() {
    if(maxDepth-- == 0)
        throw new IllegalStateException("Stack Overflow");
    recursiveMethod();
    maxDepth++;
}

推荐阅读