我在这里有一些针对Java的练习题.我们应该在不使用编译器的情况下确定答案.
请参考以下方法:
public static int product(int n){
if (n <= 1)
return 1;
else
return n * product(n-2);
}
Run Code Online (Sandbox Code Playgroud)
调用product(6)时的输出是什么?
A)1
B)8
C)12
D)48
E)70
根据答案,正确的输出是48.我真的不明白为什么这是真的.6不符合基本情况,所以它转到else语句.因此6,然后产品(6-2)=产品(4),其进入产品(2),其进入产品(0),从而产生6*4,4*2,2*0,0*0.但那是32,而不是48?有什么我想念的吗?
产品(25)由于某种原因返回-1181211311,我不确定为什么会发生这种情况.是因为递归调用中有堆栈溢出还是什么?
解释会非常有帮助,谢谢!
我刚才在javascript中回答了同样的问题:需要帮助理解来自Eloquent Javascript的递归函数示例
基本上它是一个堆栈,但更容易将其视为一个数学方程式:
n = 6*产品(4)
n = 6*4*产品(2)
n = 6*4*2*产品(0)
n = 6*4*2*1
n = 48
25抛出一个巨大的负数,因为它大于int的最大值..
| 归档时间: |
|
| 查看次数: |
561 次 |
| 最近记录: |