青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

XGuru's Blog

技術(shù),是一種態(tài)度。關(guān)注:高性能后端技術(shù)/服務(wù)器架構(gòu)/C++/C/LAMP

   :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  20 Posts :: 0 Stories :: 93 Comments :: 0 Trackbacks

公告





twitter / xoXGuru

feedsky
抓虾
google reader
鲜果
QQ邮箱
九点

常用鏈接

留言簿(12)

搜索

  •  

最新評(píng)論

閱讀排行榜

by Xguru

 又說階乘,這是老生常談了吧。想都不用想,一個(gè)遞歸輕松搞定!

int factorial(int n)
{
    
if( n == 1)
        
return 1;
    
return n * factorial(n-1);
}

或者你覺得遞歸效率沒有尾遞歸來的好 ,大筆一揮。

long fact_iter(long product, long counter, long maxcount) 
{      
  
return (counter > maxcount) ? product : fact_iter(product*counter, counter+1, maxcount);
}
      

long factorial(long n) 
{
  
return fact_iter(11, n);    
}

 
         或者你看過《代碼大全》上面說過:“如果為我工作的程序員用遞歸去計(jì)算階乘那么我寧愿換人。”
使用遞歸求階乘速度緩慢,無(wú)法預(yù)測(cè)運(yùn)行期間內(nèi)存使用情況,難以理解。于是你把遞歸改成了循環(huán)語(yǔ)句。

int factorial(int n)
{
    
int result = 1;
    
for(int i = 2 ; i <= n; i++)
    
{
        result 
= result * i;
    }

    
return result;
}
          當(dāng)你寫下這些代碼的時(shí)候,會(huì)不會(huì)覺得少了些什么?

          在我的32位環(huán)境上測(cè)試一下,計(jì)算到33!的時(shí)候的溢出了,于是你會(huì)說,這是int的值太小了嘛,于是你換了個(gè)long double,測(cè)試一下,什么玩意嘛這是,數(shù)再大一點(diǎn)的話也不行了

         
 那就改用鏈表或者數(shù)組表示吧,鏈表的速度就太慢了,用數(shù)組吧。

int factorial2(int n,int a[])

    
int carry;
    
int digit = 1;
    a[
0= 1;
    
int temp;
    
for(int i = 2; i <= n; ++i)
    
{
        
for(int j = 1, carry = 0; j <= digit; ++j)    
        
{
            temp 
= a[j-1* i + carry;
            a[j
-1= temp % 10;
            carry 
= temp / 10;
        }

        
while(carry) 
        
{
            a[
++digit-1= carry % 10;
            carry 
/= 10;
        }

    }

    
return --digit;
}

        這個(gè)算法模擬手工計(jì)算的過程,將結(jié)果保存在a數(shù)組中,返回的是結(jié)果的位數(shù)

       你在這個(gè)時(shí)候是不是感覺輕飄飄了呢?請(qǐng)暫時(shí)打住。

        如果我要求一個(gè)
10W以上大數(shù)的一個(gè)科學(xué)計(jì)數(shù)法的表達(dá)式呢?或者是問你,10W 級(jí)別上的N!左邊第三位的數(shù)字是多少?呃,這個(gè)是數(shù)學(xué)家的事了吧?振作精神,來挑戰(zhàn)自我吧!真正的程序員需要的就是這種追根究底的精神。
        來試試數(shù)學(xué)分析方法,James Stirling這位蘇格蘭數(shù)學(xué)家,280多年前就給出了這個(gè)極限式子

                                     

       這個(gè)式子能用極快的速度求出n!的近似值,也可以使用它來無(wú)限接近準(zhǔn)確結(jié)果。具體的介紹和證明過程在這里 或者 這里

斯特靈級(jí)數(shù)公式



      下面的代碼是求大數(shù)N!科學(xué)計(jì)數(shù)法表示

struct bigNum 
{
       
double n; //尾數(shù)
       int    e; //指數(shù)
}
;
void factorial3(struct bigNum *p,int n)
{
       
double logx,s,item;//s:級(jí)數(shù)的和  item:級(jí)數(shù)的每一項(xiàng)
       int i;
       logx 
= n* log10((double)n/E);
       p
->= (int)(logx);   p->n= pow(10.0, logx-p->e);
       p
->*= sqrt( 2* PI* (double)n);
       
for (item=1.0,s=0.0,i=0;i<sizeof(a1)/sizeof(double);i++)
       
{
              s 
+= item * a1[i];
              item 
/= (double)n;
       }

       p
->*=s;
}

 

      下面這個(gè)是階乘的對(duì)數(shù)的漸近展開式
               

void factorial3b(struct bigNum *p,int n)
{
    
double logR;
    
double s,item;
    
int i;
    logR
=0.5*log(2.0*PI)+((double)n+0.5)*log(n)-(double)n;
    
    
for (item=1/(double)n,s=0.0,i=0;i<sizeof(a2)/sizeof(double);i++)
    
{
        s
+= item * a2[i];
        item 
/= (double)(n)* (double)n; 
    }

    logR
+=s;
    p
->= (int)( logR / log(10));//換底公式
    p->= pow(10.00, logR/log(10- p->e);
}

       要是求階層的位數(shù)也是特別簡(jiǎn)單

double getFactorialLength(int n)
{
    
return (n * log(double(n)) - n + 0.5 * log(2.0 * n * PI )) / log(10.0)+1;
}

       這個(gè)求出來的是位數(shù)的近似數(shù),或者是改進(jìn)一下,使用ceil函數(shù)來求出不小于給定實(shí)數(shù)的最小整數(shù)。

int getFactorialLength(int n)
{
    
if( n == 1 )
        
return 1;
    
else
    
return (int)ceil((N*log(N)-N+log(2*N*PI)/2)/log(10));
}


到此,你會(huì)不由感嘆:計(jì)算機(jī)科學(xué)中最閃光,最精髓,最本質(zhì)的東西還是數(shù)學(xué)



芒德布羅集合的邊界
最后用羅素的話結(jié)束這篇隨筆:
       Mathematics, rightly viewed, possesses not only truth, but supreme beauty — a beauty cold and austere, like that of sculpture, without appeal to any part of our weaker nature, without the gorgeous trappings of painting or music, yet sublimely pure, and capable of a stern perfection such as only the greatest art can show. The true spirit of delight, the exaltation, the sense of being more than Man, which is the touchstone of the highest excellence, is to be found in mathematics as surely as poetry.

 

參考資料
1.Tom M. Apostol.《數(shù)學(xué)分析, 微積分》(Mathematical Analysis)
2.Steve McConnell.《代碼大全(第二版)》(CODE COMPLETE, Second Edition)
3.http://en.wikipedia.org/wiki/Stirling_approximation#History

4.
http://mathworld.wolfram.com/StirlingsApproximation.html

5.
http://zh.straightworldbank.com/wiki/%E6%96%AF%E7%89%B9%E6%9E%97%E5%85%AC%E5%BC%8F

 

posted on 2009-12-30 19:02 XGuru 閱讀(1919) 評(píng)論(4)  編輯 收藏 引用

Feedback

# re: 雜感系列之二--階乘算法雜感 2009-12-30 22:55 NighCrawler
最后的那張分形幾何圖是軟件生成的?  回復(fù)  更多評(píng)論
  

# re: 雜感系列之二--階乘算法雜感 2010-01-05 18:24 argmax
Stirling公式只是一個(gè)近似,當(dāng)n較大時(shí)才比較接近原始的結(jié)果。  回復(fù)  更多評(píng)論
  

# re: 雜感系列之二--階乘算法雜感[未登錄] 2010-04-02 17:34 Mingle
文章中的數(shù)學(xué)公式是如何書寫的?  回復(fù)  更多評(píng)論
  

# re: 雜感系列之二--階乘算法雜感[未登錄] 2010-04-06 22:37 xguru
@Mingle
latex公式常用宏包 http://www.ctex.org/documents/packages/math/index.htm

還有 word2007的公式生成也不錯(cuò)呢
  回復(fù)  更多評(píng)論
  


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品久久久久久av福利软件 | 亚洲国产精品久久久久秋霞不卡| 99精品免费网| 国产精品视频一二三| 午夜亚洲精品| 久久国产日韩| 亚洲人永久免费| aaa亚洲精品一二三区| 国产乱码精品一区二区三| 久久久久久久久一区二区| 久久这里有精品15一区二区三区 | 国产欧美1区2区3区| 久久精彩免费视频| 鲁鲁狠狠狠7777一区二区| 在线亚洲一区观看| 性色av一区二区三区在线观看| 韩国一区电影| 99成人免费视频| 国产一区二区三区黄视频| 欧美黄色成人网| 国产精品乱子久久久久| 麻豆精品精华液| 国产精品久久国产三级国电话系列 | 欧美日韩国产123区| 欧美一级淫片播放口| 美女脱光内衣内裤视频久久网站| 亚洲午夜av在线| 美女成人午夜| 欧美亚洲视频一区二区| 欧美99久久| 久久久久久97三级| 欧美日韩视频第一区| 久久中文欧美| 国产精品视频网站| 亚洲裸体俱乐部裸体舞表演av| 国产一区二区三区在线观看免费| 91久久精品日日躁夜夜躁欧美 | 久久综合激情| 久久久久国产精品人| 欧美日韩在线一区二区三区| 六月婷婷久久| 国产日韩欧美精品综合| 99re8这里有精品热视频免费 | 久久久久一区二区三区| 国产精品成人一区二区网站软件| 欧美国产亚洲视频| 极品少妇一区二区| 亚洲欧美在线一区二区| 亚洲影音先锋| 欧美日韩国产综合视频在线| 欧美成人免费在线观看| 国产日韩在线亚洲字幕中文| 99视频有精品| 亚洲一区二区三区精品在线观看| 欧美gay视频激情| 奶水喷射视频一区| 精品999日本| 久久婷婷国产综合国色天香| 欧美永久精品| 久久久久久网| 国产一区二区精品久久99| 一本大道久久a久久精二百| 亚洲毛片在线| 欧美精品一区二区三| 最新国产成人av网站网址麻豆| 亚洲二区三区四区| 欧美成人亚洲成人日韩成人| 欧美高潮视频| 亚洲区一区二| 欧美久久一区| 一区二区三区日韩精品| 亚洲一区二区三区在线播放| 国产精品久久久久免费a∨大胸| 亚洲精品视频一区| 亚洲综合色激情五月| 国产精品男gay被猛男狂揉视频| 亚洲中无吗在线| 久久久久久网址| 亚洲国产精品t66y| 欧美久久综合| 亚洲欧美第一页| 久久综合狠狠综合久久综青草| 在线观看欧美日韩国产| 欧美激情视频一区二区三区免费| 亚洲精品美女在线观看| 亚洲欧美成人一区二区三区| 国产欧美精品| 另类专区欧美制服同性| 亚洲看片一区| 久久精品综合| 日韩视频在线观看国产| 国产精品高潮呻吟| 久久三级视频| 宅男噜噜噜66国产日韩在线观看| 欧美成人一区二区| 日韩午夜电影| 久久免费视频这里只有精品| 91久久精品国产91久久| 国产精品一区二区女厕厕| 久久综合久久美利坚合众国| 一本久道久久综合狠狠爱| 久久久久国产精品www| 一区二区三区四区蜜桃| 国内精品嫩模av私拍在线观看| 欧美激情中文字幕乱码免费| 亚洲欧美日产图| 亚洲国产女人aaa毛片在线| 久久高清国产| 一区二区三区四区五区精品视频| 国外视频精品毛片| 国产精品av一区二区| 免费高清在线视频一区·| 亚洲欧美日韩国产综合在线 | 亚洲精品国产精品国自产观看浪潮| 午夜在线精品| 这里只有视频精品| 91久久久亚洲精品| 激情成人综合| 国产乱码精品一区二区三区不卡| 欧美日韩1区2区3区| 久久亚洲精选| 久久久久久久成人| 香蕉国产精品偷在线观看不卡| 日韩视频久久| 欧美激情网站在线观看| 美乳少妇欧美精品| 狼人社综合社区| 久久久美女艺术照精彩视频福利播放| 亚洲欧美日韩在线综合| 亚洲天堂偷拍| 中文一区二区| 亚洲神马久久| 亚洲午夜精品一区二区| aa日韩免费精品视频一| 91久久香蕉国产日韩欧美9色| 国产亚洲一级| 国产偷自视频区视频一区二区| 国产精品女主播在线观看| 欧美日韩在线一区| 国产精品国产三级国产专播精品人| 欧美风情在线观看| 欧美激情精品久久久| 欧美国产一区二区在线观看| 欧美成人高清| 美女主播一区| 欧美精品国产精品| 欧美日韩天天操| 国产精品久久久久久亚洲调教| 欧美三级视频| 国产精品久久久久久久久久妞妞 | 国产女主播在线一区二区| 国产精品无码永久免费888| 国产精品久久久久一区二区| 国产精品乱码| 国产视频一区在线观看| 国语精品中文字幕| 亚洲欧洲中文日韩久久av乱码| 亚洲日本理论电影| 亚洲网站在线播放| 香蕉免费一区二区三区在线观看 | 欧美激情国产日韩精品一区18| 亚洲狠狠丁香婷婷综合久久久| 亚洲激情视频在线播放| 日韩小视频在线观看| 亚洲欧美国产精品桃花| 久久久久久9999| 久久久久久香蕉网| 亚洲国产欧美一区| 亚洲视频一二三| 欧美一区二区三区日韩视频| 久久综合网hezyo| 欧美性开放视频| 精品成人在线| 制服诱惑一区二区| 久久久久久久久久久成人| 亚洲高清网站| 亚洲欧美日韩在线观看a三区| 久久艳片www.17c.com| 欧美日韩亚洲三区| 伊人久久久大香线蕉综合直播| 日韩一级二级三级| 久久久久久亚洲综合影院红桃| 亚洲国产精品嫩草影院| 性色一区二区| 欧美视频在线不卡| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲午夜性刺激影院| 男人的天堂亚洲| 亚洲欧美日韩综合| 欧美日韩亚洲一区二| 影音先锋久久久| 欧美一区二区三区免费视频| 亚洲风情在线资源站| 久久精品国产精品亚洲综合| 欧美三级精品| 夜夜嗨一区二区| 亚洲第一在线视频| 久久偷窥视频| 国产一区二区三区丝袜| 午夜免费久久久久|