为什么Eclipse中的显示不支持Java中的递归函数?

时间:2012-05-15 19:13:06

标签: java eclipse

我在Eclipse IDE中用Java实现了一个factorial函数。

public class Utilities {
   public static int factorial(int n) {
        int result;
    if (n <= 1) // base case
        return 1;
    else {
        result = (n * factorial(n - 1));
        return result;
    }
}
}

在Eclipse的显示中,我检查Utilities.factorial(6)。但是,我收到了这个错误。

Utilities.factorial(6);
    Evaluation failed. Reason(s):
        Cannot perform nested evaluations.

为什么显示器不支持递归调用?这是问题吗?

3 个答案:

答案 0 :(得分:9)

要返回答案,它必须评估表达式,为此必须评估内部表达式,为此必须评估内部表达式,为此必须评估内部表达式。

通常,当调试器烧坏堆栈(嵌套堆栈帧太多)时,人们会向编写调试器的开发团队提交错误。他们通过目前已知的唯一手段来解决问题:没有递归。

如果您可以评估堆栈在不以嵌套方式评估表达式的情况下需要多深,对于任何递归表达式;有一个闪亮的Fields Medal等着你(可能是大学准备以你的名义建造一座新建筑)。这个问题与the Halting Problem有关,不幸的是,在我们的计算模型中,已知暂停问题无法解决。

答案 1 :(得分:4)

罪魁祸首:递归

大多数IDE都不会进行这种评估,它与Java无关,而与递归有关。由于Eclipse无法知道递归的深度,因此它甚至无法评估表达式,否则它可能会挂起JVM(如果递归是错误的)或导致“out of heap”异常,在任何一种情况下,很难恢复。

您是否尝试过较小的哨兵号码,例如: Utilities.factorial(1)

答案 2 :(得分:-1)

无关: 如果这是您实际想要使用的方法,则递归不是可行的方法。作为最低限度,将函数重写为迭代函数。根据您的使用情况,您可以使用各种近似值,例如this onethis one