《JAVA程序設計基礎》實驗四 Fibonacci數列

/*- ==========================================================
*     文件名  :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);}
    }
}
相關文章
相關標籤/搜索