我创建了两个递归方法来计算阶乘,如下所示:
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;
}
当我调用
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
为什么这个方法会表现出这种行为?
问题是关于不同的行为。我知道n * fact(n-1)
是更好的解决方式。
有人能帮我理解这个表达式的求值吗?谢谢!
fact2(4)
实际上是6
。 - Tamas Hegedus