• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Creative Commons License
            本Blog采用 知識(shí)共享署名-非商業(yè)性使用-禁止演繹 3.0 Unported許可協(xié)議 進(jìn)行許可。 —— Fox <游戲人生>

            游戲人生

            游戲人生 != ( 人生 == 游戲 )
            站點(diǎn)遷移至:http://www.yulefox.com。請訂閱本博的朋友將RSS修改為http://feeds.feedburner.com/yulefox
            posts - 62, comments - 508, trackbacks - 0, articles - 7

            也說說級數(shù)求和(1+2+3...N)和其他

            Posted on 2007-12-21 10:19 Fox 閱讀(3366) 評論(10)  編輯 收藏 引用 所屬分類: G游戲編程

            Author: Fox

            對于(1+2+...+N) 的求和,最早就是看高斯的故事,而且說實(shí)話,我是沒有這樣的智商的:

            ????????????????sum(1+2+...+N) = N*(N+1)/2

            剛看了一篇研究該級數(shù)求和的文章,雖為調(diào)侃,但實(shí)在感覺文中紕漏太多,不禁在此多言。

            文中的第一種方法自稱標(biāo)準(zhǔn),而且還能使“全班2/3的同學(xué)都用俺的標(biāo)準(zhǔn)應(yīng)付老師和試卷”,我大為驚詫:

            1?int?i,?sum?=?0 ;
            2?for(i?=?1;i?<?N;i?++)sum?+=
            ?i;
            3?printf("1-N的級數(shù)和是:?%i",sum);


            顯然,printf的結(jié)果是N-1個(gè)數(shù)的和,此處,我更愿意相信是文中的筆誤而已。

            第二種和第三種方法讓人覺得奇怪:

            1?float ?sum;
            2?sum?=?(N?^?2)?/?2?+?N?/?2
            ;
            3?printf("1-N的級數(shù)和是:?%i",(int
            )sum);
            4?

            5?float ?sum;
            6?sum?=?N?*?(N?/?2?+?0.5
            );
            7?printf("1-N的級數(shù)和是:?%i",(int)sum);


            前面的寫法純屬惡搞,^在C/C++中是異或位操作,相信接觸過位運(yùn)算的人都知道這一點(diǎn),而且當(dāng)N為奇數(shù)時(shí),sum的結(jié)果將比真實(shí)值少1。后面的寫法更是荒唐,當(dāng)N為奇數(shù)時(shí),sum的結(jié)果將比真實(shí)值相去更遠(yuǎn)(有興趣的可以仔細(xì)看看)。

            對于后面兩種寫法,我想說的重點(diǎn)不是這些明顯的錯(cuò)誤,因?yàn)檫@樣的錯(cuò)誤只可博眾君一笑。但文中定義sum使用float的做法,讓我百思不得其解。對于計(jì)算機(jī)的運(yùn)算,浮點(diǎn)運(yùn)算的耗時(shí)和整型運(yùn)算的耗時(shí),那不是一個(gè)數(shù)量級的。對于該級數(shù)運(yùn)算,我們完全可以避免浮點(diǎn)運(yùn)算,而且方法在文章一開始,就已經(jīng)給出了:

            1?int ?sum;
            2?sum?=?N*(N+1)/2
            ;
            3?printf("1-N的級數(shù)和是:?%i",?sum);


            無論N為奇數(shù)還是偶數(shù),N*(N+1)一定是偶數(shù),因此,上述方法不存在浮點(diǎn)運(yùn)算,而且系統(tǒng)會(huì)自動(dòng)將/2的操作優(yōu)化為右移1位。

            不知怎么,忽然就想到了遞歸,想到了Fibonacci數(shù)列。講遞歸的教材都會(huì)拿上面的級數(shù)求和和Fibonacci數(shù)列做例子。其實(shí),我個(gè)人感覺這是不恰當(dāng)?shù)模胂霝榱俗寣W(xué)生掌握遞歸算法,也只能舉類似的簡單的例子。我們也知道,遞歸計(jì)算對于堆棧調(diào)用是非常頻繁而耗時(shí)的,對于求Hanoi塔這樣的復(fù)雜問題,我不知道不用遞歸有沒有更好的方法,但如果計(jì)算Fibonacci數(shù)列還是使用遞歸,在初學(xué)遞歸時(shí)是可以原諒的。簡單點(diǎn)的方法可以是這樣:

            ?1?int?fib_odd?=?0,?fib_even?=?1 ?;
            ?2?int?n?=?(N+1)/2
            ;
            ?3?for(int?i=0;?i<n;?i++
            ?)
            ?4?
            {
            ?5???fib_odd?+=
            ??fib_even;
            ?6???fib_even?+=
            ??fib_odd;
            ?7?
            }
            ?8?int?nFib?=?0
            ;
            ?9?if(?N?%?2
            ?)
            10???nFib?=
            ?fib_odd;
            11?else

            12???nFib?= ?fib_even;
            13?printf("Fibonacci數(shù)列前N項(xiàng)和是:?%i",nFib);?


            上面的兩段代碼中sum和nFib的值不能太大:)。

            常言道,言過必失。但自私一點(diǎn)講,把自己的錯(cuò)誤暴露給別人,可以讓自己更好的進(jìn)步:),因此,我寫下來,提醒自己也提醒大家,更歡迎大家多批評指正。

            Feedback

            # re: 也說說級數(shù)求和(1+2+3...N)和其他  回復(fù)  更多評論   

            2007-12-21 11:15 by bluefly
            哈……
            一笑而過

            # re: 也說說級數(shù)求和(1+2+3...N)和其他  回復(fù)  更多評論   

            2007-12-21 11:29 by Enoch
            有時(shí)候別人的無知,更好地提醒自己需要多學(xué)習(xí),多改進(jìn),多請教,多謙虛,多提問。
            謝謝lz提醒了我們。

            # re: 也說說級數(shù)求和(1+2+3...N)和其他  回復(fù)  更多評論   

            2007-12-21 14:12 by winsty
            呵呵
            確實(shí)搞笑

            # re: 也說說級數(shù)求和(1+2+3...N)和其他  回復(fù)  更多評論   

            2008-01-07 16:46 by newrain
            呵呵,如果采用查表的方式得到Fibonacci中前面的數(shù)據(jù),速度還是不錯(cuò)的,占用的空間估計(jì)與遞歸調(diào)用也沒有差多少。

            # re: 也說說級數(shù)求和(1+2+3...N)和其他  回復(fù)  更多評論   

            2008-01-07 16:55 by Fox
            @newrain
            能不能詳細(xì)說一下怎么查表啊?

            # re: 也說說級數(shù)求和(1+2+3...N)和其他[未登錄]  回復(fù)  更多評論   

            2008-02-05 21:52 by Felicia
            fibonacci數(shù)列求和可以用logn的算法,樓主怎么不介紹?
            o(∩_∩)o...

            # re: 也說說級數(shù)求和(1+2+3...N)和其他  回復(fù)  更多評論   

            2008-02-15 09:12 by Fox
            不是不介紹,是我不知道。。介紹一下吧:D

            # re: 也說說級數(shù)求和(1+2+3...N)和其他  回復(fù)  更多評論   

            2008-07-09 16:37 by ljune
            什么東西?要那么復(fù)雜的去計(jì)算嗎?真是的
            簡單點(diǎn)用遞歸法讓人家也看得明明白白。
            int i,n,sum;
            for(i=0;i<n;i++)
            {
            sum=sum+i;
            }
            printf("Fibonacci數(shù)列前N項(xiàng)和是: %i",sum);

            # re: 也說說級數(shù)求和(1+2+3...N)和其他  回復(fù)  更多評論   

            2008-07-10 17:42 by Fox
            Fn = (phi^n)/(5^(1/2)), phi = 1/2(1+(5^(1/2))).
            ——計(jì)算機(jī)程序設(shè)計(jì)藝術(shù). 第一卷. sec. 1.2.8

            # 福娃免費(fèi)空間 http://h.8wa.com[未登錄]  回復(fù)  更多評論   

            2009-07-04 14:06 by 123
            福娃免費(fèi)空間 http://h.8wa.com
            精品乱码久久久久久久| 久久亚洲精品视频| 久久人妻少妇嫩草AV无码蜜桃 | 国产亚洲精品自在久久| 国产∨亚洲V天堂无码久久久| 91精品国产乱码久久久久久 | 97久久国产露脸精品国产| 日韩久久久久久中文人妻| 伊人久久综合热线大杳蕉下载| 狠狠久久综合| 久久精品欧美日韩精品| 久久久久久av无码免费看大片| 影音先锋女人AV鲁色资源网久久| 国产精品美女久久久久网| 国产精品久久久久蜜芽| 久久久久国产精品| 色偷偷偷久久伊人大杳蕉| 日韩va亚洲va欧美va久久| 久久精品国产亚洲AV香蕉| 伊人色综合九久久天天蜜桃 | 国产精品久久久香蕉| 久久精品国产黑森林| 久久天天躁狠狠躁夜夜网站| 久久精品国产欧美日韩99热| 亚洲午夜久久久精品影院| 久久久久久亚洲AV无码专区| 亚洲精品无码久久久久AV麻豆| AAA级久久久精品无码区| 成人久久久观看免费毛片| 亚洲精品乱码久久久久66| 中文字幕精品久久久久人妻| 久久精品国产99久久久香蕉| 亚洲综合精品香蕉久久网97| 久久久青草青青亚洲国产免观| 亚洲av伊人久久综合密臀性色| 亚洲一区精品伊人久久伊人| 欧美久久久久久午夜精品| 99久久夜色精品国产网站| 午夜不卡888久久| 久久久久久国产精品美女| 国产福利电影一区二区三区久久久久成人精品综合 |