遞迴和遞推演算法求斐波那契數列(Fibonacci數列)
阿新 • • 發佈:2018-12-05
一、遞迴演算法
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