java斐波那契數列的順序輸出


斐波那契數列,即1、1、2、3、5......,從第三個數開始包括第三個數,都為這個數的前兩個數之和,而第一第二個數都為1。

下面是java輸出斐波那契數列的代碼:

import java.util.HashMap;

public class Test{
    //定義一個hashMap來存儲已經計算並且輸出過的值
    public static HashMap<Integer, Integer> hashMap = new  HashMap<Integer,Integer>();
    
    //遞歸方法
    public static int  digui(int num) {
        //判斷這個值是否已存在,若存在則直接返回該值
        if(hashMap.containsKey(num)) {
            return hashMap.get(num);
        }
        if(num<=2) {
            System.out.print(1+" ");
            hashMap.put(num, 1);
            return 1;
        }
        int sum = digui(num-1)+digui(num-2);
        System.out.print(sum+" ");
        hashMap.put(num, sum);
        return sum;
    }
    public static void main(String [] args){
       digui(10);
  }
}

輸出結果為:

1 1 2 3 5 8 13 21 34 55 

這里最重要的是把已經計算過的值保存起來,再次遇到該值時直接返回,才不會重復計算,從而使得程序運行效率更高,也保證輸出結果不會重復。

其實斐波那契數列也可以不用遞歸來輸出,或者說遞歸的效率反而不高,只不過這個知識點一直是用來練習遞歸的,所以這里我也就采用遞歸來輸出,但是加了個緩存的HashMap,所以效率比一般的遞歸還是要快很多。

斐波那契數列別的輸出方式輸出代碼如下:

import java.util.HashMap;

public class Test{

    public static void print(int num) {
        //第一個數
        int first = 1;
        
        //第二個數
        int second = 1;
        
        //接收下一個數
        int sum = 0;
        
        for(int i = 1;i<=num;i++) {
            if(i==1 || i==2) {
                System.out.print(1+" ");
            }else {
                sum = first + second;
                System.out.print(sum+" ");
                first = second;
                second = sum;
            }
        }
    }
    public static void main(String [] args){
        print(10);
  }
    
}

輸出結果如下:

1 1 2 3 5 8 13 21 34 55 

第二種方法時間復雜度只有O(num),效率還是非常高的。斐波那契數列還有很多其他的輸出方式,這里只是講幾個實現的方法,就不一一列舉其他的了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM