小编El *_*tre的帖子

理解递归阶乘中的Java行为

我创建了两个递归方法来计算阶乘,如下所示:

private int fact1(int n) {
    if (n == 0 || n == 1)
        return 1;
    return n * fact1(--n);

}

private int fact2(int n) {
    if (n == 0 || n == 1)
        return 1;
    return fact2(--n) * n;
}
Run Code Online (Sandbox Code Playgroud)

当我打电话给fact1(4)它返回24.当我调用fact2(4)它返回时6(编辑:没有返回18但是6).我知道第二种方法是制作3*2*1,但我不明白为什么不是4*3*2*1.

如果我将返回更改为,则会发生相同的情况

//fact3(4) returns 60.
return (n + 1) * fact3(--n); // wrong
//fact4(4) returns 24
return fact4(--n) * (n + 1); // works
Run Code Online (Sandbox Code Playgroud)

为什么该方法表现出这种行为? …

java recursion decrement

4
推荐指数
1
解决办法
63
查看次数

标签 统计

decrement ×1

java ×1

recursion ×1