qqqpang 发表于 2021-4-19 16:57:05

看不懂循环

//1到20阶乘的和
#include<stdio.h>
int main()
{
        double i,sum=0,j=1;
        for(i=1;i<=20;i++)
        {
                j=j*i;
                sum=sum+j;
        }
        printf("%lf",sum);
        return 0;
}
我看这个for语句后j=j*i;不是只有20的阶乘么 为什么是能求1-20的阶乘和吗

yuxijian2020 发表于 2021-4-19 17:28:56

后面不是把每次都把j加到sum上了么j是阶乘,sum是阶乘的和啊

lingnuous 发表于 2021-4-19 17:38:57

sum是1到20的阶乘的和呀!!循环里面j每做一次阶乘,sum就加一次刚才做的阶乘,一直到20,你可以吧i调成单位数测试一下,也输出一下j 。

lingnuous 发表于 2021-4-19 17:41:39

#include<stdio.h>
int main(void)
{
      double i,sum=0,j=1;
      
      for(i=1;i<=3;i++)
      {
                j=j*i;
                sum=sum+j;
      }
      printf("sum=%lf,j=%lf\n",sum,j);
      return 0;
}
//sum=9.000000,j=6.000000

qqqpang 发表于 2021-4-19 19:40:14

lingnuous 发表于 2021-4-19 17:38
sum是1到20的阶乘的和呀!!循环里面j每做一次阶乘,sum就加一次刚才做的阶乘,一直到20,你可以吧i调成单 ...

我不明白为啥j=j*i能一直循环到i,j=j*i不是只成了一次嘛

qqqpang 发表于 2021-4-19 19:45:50

yuxijian2020 发表于 2021-4-19 17:28
后面不是把每次都把j加到sum上了么j是阶乘,sum是阶乘的和啊

我不明白为啥j=j*i能一直循环到i,j=j*i不是只成了一次嘛,就比如到i等于3的时候不就是1*3吗,怎么做阶乘呢

yuxijian2020 发表于 2021-4-19 20:20:11

qqqpang 发表于 2021-4-19 19:45
我不明白为啥j=j*i能一直循环到i,j=j*i不是只成了一次嘛,就比如到i等于3的时候不就是1*3吗,怎么做阶乘 ...

看不懂的时候就做分解
i 从1 到 20 这个应该是没问题
那就分开来看呗
i = 1:
      j = j * i;                  此时j = 1 * 1--> j = 1
      sum = sum + j;       此时 sum = 0 + 1;--> sum = 1
i = 2:
      j = j * i;                  此时j = 1 * 2--> j = 2
      sum = sum + j;       此时sum = 1 + 2-->sum = 3

这种分步解析会把,自己分析下去


j = 1 * 2 * 3 * 4 * ... * 20
因为 j 每次都会乘以之前的结果,所以 j 最后的结果就是阶乘的结果
sum = 1 + 2 + 6 + 24 + ... + 2432902008176640000
因为 sum 每次都会加上上一次阶乘的结果,所以sum最后的值就是所有阶乘的和
页: [1]
查看完整版本: 看不懂循环