所以我需要输出像1!+2!...+n!=sum这样的阶乘和,我找到了一种获得一个阶乘的方法,但是我不知道如何把它们加在一起。这是我这样做的尝试:
System.out.println("Ievadiet ciparu");
Scanner in = new Scanner(System.in);
n = in.nextInt();
if ( n < 0 )
System.out.println("Ciparam jabut pozitivam.");
else
{
while (x>2){
for ( c = 1 ; c <= n ; c++ )
fact = fact*c;
sum=sum+fact;
n=n-1;
if (n==0) break;
}
System.out.println("Faktorialu summa "+sum);发布于 2013-11-03 14:40:59
与其在其他地方使用循环1-n并计算每个阶乘,不如在计算阶乘(即有两个局部变量)时累积和:一个用于阶乘,一个用于和:
long factorial = 1, sum = 0;
for (int i = 1; i <= n; i++) {
factorial *= i;
sum += factorial;
}当用n = 5测试时,sum是153,这是正确的:1 + 2 + 6 + 24 + 120
你的问题是,和在循环之外-你只是需要像这里的支撑。
而且,您的while循环条件x < 2永远不会改变,所以要么循环永远不会执行(如果x > 1),要么循环永远不会终止,因为在循环中x没有改变。
发布于 2020-02-27 19:00:18
嗯,我一直在寻找这些代码的递归版本(通过递归方法调用)。
`public static long factorialSum(long n){
long x = n;
for(int i = 1; i < n; i++){
x = (n-i)*(1+x);
}
return x;
}`如果你更仔细地研究这个问题,你会发现你可以在线性时间完成它,诀窍是在(n-1)!+ n!= (n-1)!*(1 + n),为了更深刻地理解这一点,我建议添加(n-2)!只是为了看看它是怎么生长的。
https://stackoverflow.com/questions/19754056
复制相似问题