程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> DP:斐波納契數

DP:斐波納契數

編輯:C++入門知識

題目:輸出第 n 個斐波納契數(Fibonacci)

 

方法一、簡單遞歸

這個就不說了,小n怡情,大n傷身啊……當n=40的時候,就明顯感覺到卡了,不是一般的慢。

 
 #include <iostream>
   
   Fibonacci(      (n<=)         Fibonacci(n-) + Fibonacci(n-  
 
            (cin>>         cout<<Fibonacci(n)<<         
            

 

 

方案二、動態規劃

 
 #include <iostream>
 #include <cstring>
  MAXN 300
   
      Fibonacci(      i++     F[]=     F[]=     (n<=)       
              
             F[n]=Fibonacci(n-) + Fibonacci(n-            
 
            (cin>>          i=         memset(F,,         cout<<Fibonacci(n)<<          cout<<<<i<<<<         
             

【以上程序可以優化:既然只要求輸出第n個斐波納契數f(n),則只需用兩個變量記錄f(n-1)和f(n-2),不用開數組將整個1到n的斐波納契數列都記錄下來。】

最開始忘了 if(F[n]==0) 這個判斷(17行),導致了很多次的重復計算——和遞歸算法一樣多的次數。

以下是程序運行截圖,上圖為正確程序,下圖為漏掉了 if(F[n]==0) 這個判斷的錯誤程序。可以看出運行時間上的巨大差距:

當輸入n=100時,錯誤的程序很長很長一段時間內都還沒計算出來。

 

方法三、for循環 + 數組

速度也非常快。

 
 #include <iostream>
 #include <cstring>
  MAXN 300
   
     Fibonacci(      F[]=     F[]=     (n<=)       
          ( i=; i<n; ++             F[i] = F[i-] + F[i-          F[n-   
 
            (cin>>          memset(F,,         cout<<Fibonacci(n)<<        }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved