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

XGuru's Blog

技術,是一種態度。關注:高性能后端技術/服務器架構/C++/C/LAMP

   :: 首頁 :: 聯系 :: 聚合  :: 管理
  20 Posts :: 0 Stories :: 93 Comments :: 0 Trackbacks

公告





twitter / xoXGuru

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

常用鏈接

留言簿(12)

搜索

  •  

最新評論

閱讀排行榜

by Xguru

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

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);    
}

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

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

    
return result;
}
          當你寫下這些代碼的時候,會不會覺得少了些什么?

          在我的32位環境上測試一下,計算到33!的時候的溢出了,于是你會說,這是int的值太小了嘛,于是你換了個long double,測試一下,什么玩意嘛這是,數再大一點的話也不行了

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

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;
}

        這個算法模擬手工計算的過程,將結果保存在a數組中,返回的是結果的位數

       你在這個時候是不是感覺輕飄飄了呢?請暫時打住。

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

                                     

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

斯特靈級數公式



      下面的代碼是求大數N!科學計數法表示

struct bigNum 
{
       
double n; //尾數
       int    e; //指數
}
;
void factorial3(struct bigNum *p,int n)
{
       
double logx,s,item;//s:級數的和  item:級數的每一項
       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;
}

 

      下面這個是階乘的對數的漸近展開式
               

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);
}

       要是求階層的位數也是特別簡單

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

       這個求出來的是位數的近似數,或者是改進一下,使用ceil函數來求出不小于給定實數的最小整數。

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


到此,你會不由感嘆:計算機科學中最閃光,最精髓,最本質的東西還是數學



芒德布羅集合的邊界
最后用羅素的話結束這篇隨筆:
       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.《數學分析, 微積分》(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 閱讀(1940) 評論(4)  編輯 收藏 引用

Feedback

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

# re: 雜感系列之二--階乘算法雜感 2010-01-05 18:24 argmax
Stirling公式只是一個近似,當n較大時才比較接近原始的結果。  回復  更多評論
  

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

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

還有 word2007的公式生成也不錯呢
  回復  更多評論
  


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            亚洲人体1000| 99国产精品国产精品久久 | 亚洲免费视频成人| 国产精品露脸自拍| 小嫩嫩精品导航| 欧美亚洲视频在线观看| 国产一区二区三区久久精品| 久久久国产精品亚洲一区| 久久精品国产久精国产爱| 黄色日韩精品| 亚洲欧洲一区二区三区| 欧美久久久久免费| 亚洲欧美在线x视频| 久久久精品网| 一本色道久久综合亚洲精品按摩| 一本色道婷婷久久欧美| 国产欧美日韩激情| 免费黄网站欧美| 欧美日韩综合在线免费观看| 欧美一区二区三区日韩视频| 久久免费视频这里只有精品| 99国产一区| 欧美一区二粉嫩精品国产一线天| 亚洲成人在线视频网站| av成人手机在线| 激情综合自拍| 一区二区三区 在线观看视频| 国产亚洲精品久久飘花| 亚洲国产高清一区| 国产精品伊人日日| 91久久午夜| 国内精品伊人久久久久av影院| 亚洲国产精品v| 国产欧美一区视频| 亚洲精品女av网站| 国产女人aaa级久久久级| 亚洲第一精品夜夜躁人人爽| 国产伦精品一区二区| 亚洲国产成人高清精品| 国语自产精品视频在线看一大j8 | 亚洲一区二区视频在线| 激情成人av| 亚洲性感美女99在线| 亚洲丶国产丶欧美一区二区三区| 亚洲视频一区二区在线观看| 亚洲电影av在线| 性欧美8khd高清极品| 在线一区二区三区四区| 美女在线一区二区| 久久久久国内| 国产精品你懂的在线欣赏| 亚洲国产精品久久久久| 精品二区久久| 久久国产欧美| 久久av二区| 国产麻豆成人精品| 一区二区三区偷拍| 在线视频亚洲一区| 欧美日本不卡| 亚洲人精品午夜在线观看| 在线看一区二区| 久久精品91久久香蕉加勒比| 亚洲欧美综合精品久久成人| 欧美日韩精品免费看| 欧美国产1区2区| 亚洲国产精品va| 久久久久亚洲综合| 久久综合久久88| 精品99一区二区| 老司机aⅴ在线精品导航| 久久在精品线影院精品国产| 国产亚洲视频在线观看| 午夜激情一区| 久久精品一区二区三区中文字幕 | 久久人人爽人人爽爽久久| 久久国产直播| 狠狠色狠狠色综合人人| 久久精品国产亚洲精品| 久久综合亚州| 亚洲欧洲精品一区二区三区不卡 | 欧美激情2020午夜免费观看| 亚洲第一福利在线观看| 亚洲激情在线播放| 欧美激情bt| 妖精成人www高清在线观看| 亚洲午夜一级| 国产午夜精品久久久久久免费视| 亚洲欧美综合精品久久成人| 久久午夜电影网| 亚洲福利专区| 欧美日韩直播| 亚洲欧美中文在线视频| 免费在线亚洲欧美| 99ri日韩精品视频| 国产精品夜夜夜一区二区三区尤| 午夜在线观看免费一区| 麻豆国产精品777777在线 | 欧美精品一区二区三区四区| 99伊人成综合| 久久天天躁夜夜躁狠狠躁2022| 亚洲大片在线| 欧美无乱码久久久免费午夜一区| 亚洲欧美日韩一区二区| 美女脱光内衣内裤视频久久影院| 日韩午夜av电影| 国产精品美女久久久| 久久久人成影片一区二区三区 | 欧美一区三区三区高中清蜜桃| 禁断一区二区三区在线| 欧美精品一区二区在线播放| 宅男66日本亚洲欧美视频| 久久久亚洲欧洲日产国码αv | 欧美久久久久久久| 午夜精品国产更新| 亚洲欧洲日产国产网站| 久久国产一区| 亚洲图片你懂的| 雨宫琴音一区二区在线| 国产精品美女久久久久久免费| 久久久久久亚洲精品中文字幕| 亚洲精品之草原avav久久| 久久久久一区二区| 亚洲资源av| 99视频一区二区| 亚洲大胆美女视频| 国产亚洲一区在线| 国产精品欧美经典| 欧美精品在线观看播放| 久久久人人人| 欧美在线日韩在线| 亚洲一区二区高清视频| 亚洲精品视频在线播放| 欧美福利精品| 母乳一区在线观看| 久久综合国产精品台湾中文娱乐网| 亚洲婷婷在线| 亚洲视频播放| 亚洲婷婷免费| 亚洲午夜久久久久久久久电影院| 亚洲国产精品黑人久久久| 国内久久精品| 国产一区二区三区成人欧美日韩在线观看 | 亚洲午夜av在线| 亚洲裸体俱乐部裸体舞表演av| 国产伊人精品| 国产午夜精品理论片a级大结局 | 欧美成人xxx| 免费久久99精品国产自在现线| 久久国产精彩视频| 久久久青草青青国产亚洲免观| 欧美一区三区三区高中清蜜桃| 亚洲一区二区三区在线| 一区二区欧美日韩视频| 一区二区三区导航| 亚洲尤物影院| 欧美在线日韩| 美国十次成人| 欧美日韩18| 国产精品久久久久久久久免费| 欧美三级第一页| 国产精品美女主播在线观看纯欲| 欧美亚韩一区| 国产日韩精品视频一区二区三区 | 久久久999国产| 久热成人在线视频| 欧美精品黄色| 国产九色精品成人porny| 国内精品久久久久久| 亚洲第一视频网站| 一区二区三区产品免费精品久久75| 99热免费精品| 欧美一区综合| 欧美va天堂在线| 日韩视频在线一区二区| 亚洲欧美日韩高清| 老司机午夜精品视频在线观看| 欧美国产高潮xxxx1819| 欧美手机在线| 影音先锋中文字幕一区二区| 亚洲精品国产品国语在线app | 黑人巨大精品欧美一区二区小视频| 激情五月***国产精品| 日韩亚洲一区在线播放| 午夜精品在线观看| 欧美成人免费小视频| 日韩亚洲欧美一区| 久久精品夜色噜噜亚洲a∨| 欧美精品aa| 国产亚洲综合精品| 99精品国产99久久久久久福利| 久久成人免费电影| 亚洲激情第一页| 欧美专区中文字幕| 欧美日韩中文在线| 亚洲福利电影| 久久本道综合色狠狠五月| 亚洲国产一区二区视频| 欧美一级理论片| 欧美视频观看一区| 亚洲精品中文字|