大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
n<=39
首先介绍斐波那契数:(引自百度百科)
斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。
另外:斐波那契数实际问题应用:(引自牛客网矩形覆盖问题)
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
解析:
java代码实现(递归):---------存在大量重复计算
public class Solution {
public int Fibonacci(int n) {
if(n==0){
return 0;
}else if(n==1 || n==2){
return 1;
}else if(n<=39){
return Fibonacci(n-2)+Fibonacci(n-1);
}
return 0;
}
}
用空间换时间:
public class Solution {
public int Fibonacci(int n) {
int temp[]=new int[n+1];
temp[0]=0;
for(int i=1;i<n+1;i++){
if(i<=2){
temp[i]=1;
}else{
temp[i]=temp[i-1]+temp[i-2];
}
}
return temp[n];
}
}
(迭代)--------效果比较好
public class Solution {
public int Fibonacci(int n) {
if(n==0)
return 0;
if(n==1 || n==2)
return 1;
int after=1;
int before=1;
while(n-->2){
after+=before;
before=after-before;
}
return after;
}
}