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

为什么Eclipse中的显示不支持Java中的递归函数?,java,eclipse,Java,Eclipse,我在Eclipse IDE中用Java实现了一个阶乘函数 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 IDE中用Java实现了一个阶乘函数

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;
    }
}
}
为什么显示器不支持递归调用?这就是问题所在吗?

罪魁祸首:递归 大多数IDE不会进行这种计算,它与Java无关,更多的是与递归有关。由于Eclipse不知道递归的深度,所以它甚至不需要计算表达式,否则它可能会挂起JVM(如果递归有错误)或导致“堆外”异常,无论哪种情况,都很难从中恢复

您是否尝试过为sentinel使用较小的数字,例如
实用程序。阶乘(1)

不相关:
如果这是您实际想要使用的方法,那么递归就不是一种方法。作为最低要求,将函数作为迭代函数重新编写。根据您的用例,您可以使用各种近似值,例如或。

要返回答案,它必须对表达式求值,要做到这一点,它必须对内部表达式求值,要做到这一点,它必须对内部表达式求值,要做到这一点,它必须对内部表达式求值

通常,当调试器破坏堆栈(嵌套的堆栈帧太多)时,人们会将错误提交给编写调试器的开发团队。他们用目前已知的唯一方法解决了这个问题:无递归


对于任何递归表达式,如果不以嵌套方式计算表达式,则可以计算堆栈需要达到的深度;有一所闪亮的大学在等着你(可能还有一所大学准备以你的名义建造一座新大楼)。这个问题与我们的计算模型有关,不幸的是,我们知道停止问题无法解决。

如果需要解决方法,它在使用调试器时在表达式视图中工作。如果将
结果=
替换为
返回
,则可以保存3行代码,顺便说一句,因为不跟踪堆栈跟踪更快。听起来像是过早的优化。您知道在超过int的值空间之前需要多少步吗?
Utilities.factorial(6);
    Evaluation failed. Reason(s):
        Cannot perform nested evaluations.