首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

阶乘和
EN

Stack Overflow用户
提问于 2013-11-03 14:32:40
回答 2查看 1.3K关注 0票数 1

所以我需要输出像1!+2!...+n!=sum这样的阶乘和,我找到了一种获得一个阶乘的方法,但是我不知道如何把它们加在一起。这是我这样做的尝试:

代码语言:javascript
复制
 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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-03 14:40:59

与其在其他地方使用循环1-n并计算每个阶乘,不如在计算阶乘(即有两个局部变量)时累积和:一个用于阶乘,一个用于和:

代码语言:javascript
复制
long factorial = 1, sum = 0;
for (int i = 1; i <= n; i++) {
     factorial *= i;
     sum += factorial;
}

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

你的问题是,和在循环之外-你只是需要像这里的支撑。

而且,您的while循环条件x < 2永远不会改变,所以要么循环永远不会执行(如果x > 1),要么循环永远不会终止,因为在循环中x没有改变。

票数 6
EN

Stack Overflow用户

发布于 2020-02-27 19:00:18

嗯,我一直在寻找这些代码的递归版本(通过递归方法调用)。

代码语言:javascript
复制
`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)!只是为了看看它是怎么生长的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19754056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档