有谁知道这个Java小程序有什么问题啊!!

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:09:29
class Fff{
long f = 1;
public long ff(int n){
while( n>0){
f = ff(n-1)*n;
}
return f;
}
}

public class TestFactorial {
public static void main(String args[]){
Fff f1 = new Fff();
System.out.println(f1.ff(10));
}
}

class Fff{
long f = 1;
public long ff(int n){
if( n>0){
f = ff(n-1)*n;
}
return f;
}
}

public class TestFactorial {
public static void main(String args[]){
Fff f1 = new Fff();
System.out.println(f1.ff(10));
}
}

改成这样就正确的了。 这是一个典型的递归问题。
上面的代码存在的问题是“死循环”,为什么是死循环? 因为 第一次进入方法ff时, 参数n就大于0,而且参数n在while循环中,从未发生变化。 其实,你还没理解递归的真正含义-连续的指针

这是个死循环啊。就是while(n>0)那里,你的n没做n--,所以n一直>0,形成了死循环了,应该在你的f=ff(n-1)*n;后面加一个n--;,但你这样最后结果是0;因为你是n>0,所以n-1就等于0了