java在一个范围之间乘以数字

时间:2018-01-24 19:32:57

标签: java

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

2 个答案:

答案 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循环。