遞歸和遞推算法求斐波那契數列(Fibonacci數列)(Java實現)

一、遞歸算法

import java.util.Scanner;

//Fibonacci數列:1,1,2,3,5,8,...
//求該數列第n個數的值。
//數列滿足遞歸公式:F1=1,F2+=1,Fn=Fn-1 + Fn-2
public class Fibonacci {
    public static void main(String[] args){
        System.out.println("你想知道Fibonacci數列第幾項的值?");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println("數列的第n項的值爲:" + f(n));
    }

    public static int f(int n){
        if(n <= 0) {//提高健壯性
            System.out.println("輸入的 n 應該大於0");
            return -1;
        }else if(n == 1 || n == 2){
            return 1;
        }else{
            return f(n-1)+f(n-2);
        }
    }

//以下方法改編自:https://blog.csdn.net/u010425776/article/details/50830193

   //計算斐波那契數列長度,代碼應該還有錯誤,還沒解決
//    public static int fibonacci_recursion(int n){
//        if(n<0){
//            System.out.println("n不能小於0");
//            return 0;
//        }
//
//        if(n==0 || n==1)
//            return n;
//
//        //a1用於存儲fibonacci(n-2),a2用於存儲fibonacci(n-1),a3用於存儲fibonacci(n)
//        int a1=0,a2=1,a3=1;
//        for(int i=0;i<n-1;i++){
//            a3 = a1+a2;
//            a1 = a2;
//            a2 = a3;
//        }
//
//        return a3;
//    }
}

二、遞推算法

import java.util.Scanner;

//用遞推算法來實現斐波那契數列
//它的前若干項是:1,1,2,3,5,8,13,21,34…求此數列的第n項。
public class Fibonacci_1 {
    public static void main(String[] args) {
        System.out.println("你想知道Fibonacci數列第幾項的值?");
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println("數列的第n項的值爲:" + f(n));
    }

    public static int f(int n){
        int f0 = 1, f1 = 1;
        int f2 = 0;

        for(int i = 3; i <= n; i++){
            f2 = f0 + f1;
            f0 = f1;
            f1 = f2;
        }
        return f2;
    }
}

其他可參考博客:https://blog.csdn.net/zz3111057382/article/details/51964859

https://blog.csdn.net/KuHuaiShuXia/article/details/52217872

https://blog.csdn.net/yangwenxue_admin/article/details/44494419

錯排問題:https://blog.csdn.net/why_still_confused/article/details/51505241

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章