Xpool 1
6
here
xpool here
xpool here
^C
ap@ubuntu:~/Desktop$
}
public class Main {
public static int sum = 1;
public static void main(String[] args) {
System.out.println(factorial(4,8));
}
public static long factorial(long min , long max ){
if(max >= min) {
sum *= max;
max -= 1;
factorial(min ,max);
}
return sum;
}
}
为什么带有while的那个给我一个错误而另一个用if语句工作,这个代码应该乘以范围(min和max)之间的所有数字,例如factorial(4, 8)= 8 * 7 * 6 * 5 * 4
答案 0 :(得分:0)
我不确定你得到的错误,但是如果你在while循环中对factorial()进行递归调用,那么你就会为循环的每次迭代创建一个递归调用。每个递归调用都会拥有它自己的while循环,并拥有自己的递归调用集,并且最终会在堆栈上进行大量调用。
此外,在您的程序的两个版本中,您没有对递归调用的返回值执行任何操作。因此,虽然您的第一个版本没有出现错误,但它无法正确计算因子。尝试这样的事情:
getopt_long()
你会像这样调用它:
axt
答案 1 :(得分:0)
如果你干了代码,你会发现问题出在哪里 你在第二种情况下混合迭代和递归。
阶乘(2,4):
sum = 4
max = 3
sum = 4 * 3
max = 2
sum = 4 * 3 * 2
max = 1
sum = 4 * 3 * 2
max = 3
因此,在此步骤中,您可以看到,当递归调用返回时,它使用它的max
的本地副本,即3.这会导致额外的乘法。
在代码1中不是这种情况,你不进行while循环。