1

所以我需要输出一个阶乘的总和,就像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);
4

2 回答 2

6

与其有一个循环 1-n 并在别处计算每个阶乘,我会在您计算阶乘时累积总和 - 即有两个局部变量;一个用于阶乘,一个用于总和:

long factorial = 1, sum = 0;
for (int i = 1; i <= n; i++) {
     factorial *= i;
     sum += factorial;
}

当使用 , is 进行测试时n = 5sum153是正确的:1 + 2 + 6 + 24 + 120

你的问题是总和在循环之外- 你只需要像这里这样的大括号。


此外,您的while循环条件x < 2永远不会改变,因此循环永远不会执行(如果x > 1)或者循环永远不会终止,因为x在循环内没有改变。

于 2013-11-03T14:40:59.030 回答
0

嗯,我寻找这些代码的递归(通过递归方法调用)版本仍然无处可去

`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)!只是为了看看它是如何成长的。

于 2020-02-27T19:00:18.953 回答