输入n,输出斐波那契数列值;
思路1
递归思想直接上线,没什么好说的。
求解1
/**
* 面试题10-1:斐波那契数列
* 求斐波那契数列的第n项。
* n=0,f(n)=0;
* n=1,f(n)=1;
* n>1,f(n)=f(n-1)+f(n-2)
*
* @author Heroin X
* @date 2019/12/17 18:58
*/
public class FibonacciNum {
public static void main(String[] args) {
Integer num1 = new FibonacciNum().getFibonacciNum1(6);
Integer num2 = new FibonacciNum().getFibonacciNum2(6);
System.out.println(num1);
System.out.println(num2);
}
/**
* 解法1
* @param n
* @return
*/
public Integer getFibonacciNum1(Integer n){
if (n==0){
return 0;
}else if (n==1){
return 1;
}else if (n>1){
return getFibonacciNum1(n-1)+getFibonacciNum1(n-2);
}else {
return null;
}
}
}
思路2
用递归有一些不好的地方。(1)栈内存会溢出(2)递归中做了许多重复计算,无用功,浪费时间空间,改用从下至上的解法,时间复杂度降低为O(n)
解法2
/**
* 解法2
* @param n
* @return
*/
public Integer getFibonacciNum2(Integer n){
int[] num = new int[n+2];
num[0]=0;
num[1]=1;
int i=2;
while (i<=n){
num[i]=num[i-1]+num[i-2];
i++;
}
return num[n];
}
思路3
矩阵解法,只是一种思路。