java / eclipse:递归函数,控制输入If和else条件

时间:2017-06-10 10:52:37

标签: java recursion

我需要帮助理解这个递归函数

 private int findFactorial(int n) {

        if (n == 0) { 
            return 1;
        } else {
            return (n * findFactorial(n - 1));
        }

    }

我的问题,当n == 0时,函数返回1,那么为什么函数的最终返回不是1及其阶乘。 我试过断点。在n == 0的最后一次运行中,它进入"如果"条件和"否则"条件,如何控制输入if和else

编辑:日食显示控件正在输入if / else。编辑,因为它引起了读者的困惑,我的主要问题与递归有关,而不是为什么eclipse显示这种有线行为

2 个答案:

答案 0 :(得分:0)

您可能误解了调试器告诉您的内容。当n为零时,您将执行if分支。在return 1之后,接下来要执行的是在findFactorial 的封闭式调用中的其他分支。再次检查。

(你不会/不应该/将不会同时获得"如果"和#34;否则"分支在同一findFactorial电话中执行。如果不知何故那将是一个Eclipse bug。)

答案 1 :(得分:0)

案例n = 2:

  • 它转到else语句,其值为(2 * factorial(1)) 所以我们有 2 *(即将出现的东西)

现在n = 1

  • 它再次转到else语句,我们之前拥有的值 即 2 * 1 * factorial(1-1)

现在n = 0

  • 是。这次转到if语句并返回1 ,返回上一个 2 * 1 *的else语句?正在等待阶乘(1-1)。 所以我们得到 2 * 1 * 1 = 2。

希望这有帮助