gogo1979 发表于 2011-4-28 22:58:55

这道题不理解

本帖最后由 soldier 于 2011-4-30 08:27 编辑

这个函数是计算阶乘的。
long f2(int q)   //比如说这里 q 是6
{
    long c=1;
    int i;                                                          我的理解是:第一次循环1=1*1第二次循环2=1*2第三次循环6=2*3
    for(i=1;i<=q;i++)                                    第四次循环24=6*4第五次循环120=24*5好像不对啊。那他是怎么实
      c=c*i;                /*这里不就不太明白了。       现6*5*4*3*-2*1的。望高手指点。
    return c;                                                                                                                                       
}                                                                                                                                       

仰望天上的光 发表于 2011-4-28 23:05:37

第1次循环开始,c=0!. 在循环过程中, c=c*1=0!*1=1!,第1次循环结束,c=1!
第2次循环开始,c=1!. 在循环过程中, c=c*2=1!*2=2!,第2次循环结束,c=2!
第3次循环开始,c=2!. 在循环过程中, c=c*3=2!*3=3!,第3次循环结束,c=3!
...
第i次循环开始,c=(i-1)!. 在循环过程中, c=c*i=(i-1)!*i=i!,第i次循环结束,c=i!

winddyj 发表于 2011-4-28 23:17:21

如果写成c=1*1*2*3*4*5也许楼主就明白了,第一个1是C自己,后面每次递增的都是I
C放的是每次相乘的结果,每一次和I相乘,结果放回C
然后再用结果C和自增1的I再乘,结果再放回C

gogo1979 发表于 2011-4-28 23:28:52


啊知道了那个星号是不是代表阶乘的意思啊。不是乘号。
还有点不懂。没开始循环之前c=1   人家不是已经赋值为1了吗
为什么你那里c=0不理解

gogo1979 发表于 2011-4-28 23:59:18

哦,这下真的明白了。每次循环都是计算的积乘以递增的i的值.
c=c*i;   其实这句我是理解的。我楞吧他想成是c=1*1;c=1*2;c=2*3;c=3*4荒唐真是太荒唐了。估计脑袋是进水了,真想扇自己两耳光。犯了个低级错误。
以前没接触过阶乘这个概念,弄的我有点晕了。(自己是初中毕业,小学文化程度。哎~后悔)                               非常感谢两位的回答,谢谢了。

q369965658 发表于 2011-4-29 11:43:22

c=c*i;      1*1
                  1*2
                  2*3
               6*4
               24*5
               120*6

鱼C工作室.YCGZS 发表于 2015-12-14 16:28:03

是这样的
页: [1]
查看完整版本: 这道题不理解