一、递归算法
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