这是我的代码,我需要解释这段代码是如何工作的result=fact(n-1)*n;
。我的预期答案与输出不一样。我想在返回后栈应该执行恢复状态,第一个执行状态是
n=2
和(2-1)*2=2
,然后是n=3,(3-1)*3=6
,然后是n=4,(4-1)*4=12
,然后是n=5,(5-1)*5=20
。
我预期的最终答案是20.我怎么得到120?堆栈如何在这种情况下工作?提前致谢。
public class Factorial
{
int fact(int n)
{
int result;
if(n==1) return 1;
result=fact(n-1)*n;
System.out.println("value of n="+n);
System.out.println(result);
return result;
}
}
class TestFact
{
public static void main(String[] args)
{
Factorial ob=new Factorial();
System.out.println("Final="+ob.fact(5));
}
}
给定程序的输出是
n = 2的值
2 值n = 3
6 值n = 4
24 值n = 5
120
最后= 120
答案 0 :(得分:3)
你误解了计算阶乘的方法。
对于每个n >= 1
:
<强>例:强>
算法是正确的。你只是误解了如何计算阶乘。
改进代码以便更好地输出
public class Factorial{
int fact(int n) {
int result;
if(n==1) return 1;
result=fact(n-1)*n;
System.out.println("Fat(" + n + ")=" + result);
return result;
}
public static void main(String[] args){
Factorial fat = new Factorial();
System.out.println("Final=" + fat.fact(5));
}
}
答案 1 :(得分:0)