【问题标题】:Java factorial value changes when return is not 1当 return 不是 1 时 Java 阶乘值发生变化
【发布时间】:2020-03-04 01:23:47
【问题描述】:

如果if condition 返回的值不是 1,则阶乘值会发生变化。

据我了解,return 是停止程序的方法。但是if statement return 是如何与factorial return 声明相关的呢?

这是 if 条件:

    if (value == 1) {
       // return 0 will cause the factorial return to multiple by 0.
       // return 2 will cause the factorial return 48.
        return 1;  
    }

最终代码:

public class test {

    public static void main(String[] args) {
        System.out.println(factorial(4));

    }

    private static int factorial(int value) {

        if (value == 1) {
           // return 0 will cause the factorial return to multiple by 0.
           // return 2 will cause the factorial return 48.
            return 1;  
        }

        return factorial(value - 1) * value;

    }

}

【问题讨论】:

标签: java if-statement recursion return


【解决方案1】:

如果您为factorial(1) 返回2(这是不正确的),

你返回factorial(1) * 2 == 4 换取factorial(2)

然后你返回factorial(2) * 3 == 12 换取factorial(3)

然后您返回 factorial(3) * 4 == 48 以获得 factorial(4)

如您所见,如果您在递归结束时返回不正确的值,您将得到一个整体不正确的结果。

由于factorial(1)等于1,所以value == 1时应该返回1。

【讨论】:

  • (或返回1 for factorial(0)
【解决方案2】:

我相信您对递归概念有些困惑。

让我们以 value = 3 为例,逐个执行代码。

输出应该是 3! = 3 * 2 * 1 = 6

现在让我们考虑一下你将如何编写代码以及为什么它应该在 If 块中返回 1。

第一次执行 factorial(3) => 条件会失败,所以会返回 factorial(2) * 3;

第二次执行阶乘(2) => 条件会失败,所以会返回阶乘(1) * 2;

3rd execution factorial(1) => 条件通过,所以返回1;

现在替换上面的那些值,

阶乘(1) = 1,

阶乘(2) = 1 * 2

和阶乘(3) = 1 * 2 * 3

这就是我们想要的。

现在想象一下,如果你返回 1 以外的任何值,那么输出将会改变

例如。如果我们返回 2,那么 2 * 2 * 3(不是 3!)

我希望这对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2023-01-13
    • 2022-07-29
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多