/*- ========================================================== * 文件名 :YPR_Fibonacci.java * 開發人員:袁培榮 CK0904班 學號:U200911171 * 當前版本:1.0.0.2595 * 建立時間:2012-03-09 * 修改時間:2012-03-09 * 功能說明:《JAVA程序設計基礎》實驗四 Fibonacci數列 * 版權說明:版權全部 袁培榮 YuanPeirong * 編譯環境:Windows 7(x64) SP1 簡體中文專業版 * JDK版本: JDK 7U3-B05(Windows-x64) - ==========================================================*/ /*- ========================================================== Fibonacci數列 F(1)=1, F(2)=1, … F(n)=F(n-1)+F(n-2) (n>=3) - ==========================================================*/ import java.io.*; public class YPR_Fibonacci { public static void main(String args [ ]) { System.out.println("這是一個Fibonacci數列的演示程序"); System.out.println("下面輸出的是數列的前20項:"); System.out.println("n F(n)"); //m_PrintFibonacci(20); m_PrintFibonacciBetter(20); } //用遞歸法求Fibonacci數列第n項 public static int m_Fibonacci(int n) { int iFibonacci; if(n<1) { iFibonacci=-1; System.out.println("參數錯誤,必須是大於0的整數!"); } else if(n==1 | n==2) {iFibonacci=1;} else {iFibonacci=m_Fibonacci(n-1)+m_Fibonacci(n-2);} return iFibonacci; } //求Fibonacci數列第n項 算法優化 public static int m_FibonacciBetter(int n) { int iFibonacci=0,iTemp1=1,iTemp2=1; if(n<1) { iFibonacci=-1; System.out.println("參數錯誤,必須是大於0的整數!"); } else if(n==1 | n==2) {iFibonacci=1;} else { for(int i=3;i<=n;i++) { iFibonacci=iTemp1+iTemp2; iTemp1=iTemp2; iTemp2=iFibonacci; } } return iFibonacci; } //打印Fibonacci數列前n項 public static void m_PrintFibonacci(int n) { if (n>0) { for(int i=1;i<=n;i++) { //int j=m_Fibonacci(i); int j=m_FibonacciBetter(i); if (i<10) {System.out.println(i+" "+" "+j);} else {System.out.println(i+" "+j);} } } else {m_Fibonacci(n);} } //打印Fibonacci數列前n項 算法優化 public static void m_PrintFibonacciBetter(int n) { if (n>0) { int j=0,iTemp1=1,iTemp2=1; for(int i=1;i<=n;i++) { if(i==1 | i==2) {j=1;} else { j=iTemp1+iTemp2; iTemp1=iTemp2; iTemp2=j; } if (i<10) {System.out.println(i+" "+" "+j);} else {System.out.println(i+" "+j);} } } else {m_Fibonacci(n);} } }