JAVA:有人可以向我解释这个递归代码吗?

use*_*277 1 recursion

我在这里有一些针对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,我不确定为什么会发生这种情况.是因为递归调用中有堆栈溢出还是什么?

解释会非常有帮助,谢谢!

Xer*_*ati 6

我刚才在javascript中回答了同样的问题:需要帮助理解来自Eloquent Javascript的递归函数示例

基本上它是一个堆栈,但更容易将其视为一个数学方程式:

n = 6*产品(4)

n = 6*4*产品(2)

n = 6*4*2*产品(0)

n = 6*4*2*1

n = 48

25抛出一个巨大的负数,因为它大于int的最大值..