Fibonacci为1200年代的欧洲数学家,在他的著作中曾经提到:「若有一只免子每个月生一只小免 子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三 只免子,三个月后有五只免子(小免子投入生产)......。 如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生 产,类似的道理也可以用于植物的生长,这就是Fibonacci数列,一般习惯称之为费氏数列,例 如以下: 1、1 、2、3、5、8、13、21、34、55、89......
上面是资料上对斐波拉契数列的介绍:
画个图理解一下:
题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
//这道题第0项为0,不是1
public class Solution {
public int Fibonacci(int n) {
if(n<=0)
{
return 0;
}
else if(n==1 || n==2)
{
return 1;
}
else
{
return Fibonacci(n-1) + Fibonacci(n-2);
}
}
}
但是这样递归的话,比如n很大,会出现栈溢出的结果;使用迭代可以避免栈溢出:
public class Solution10 {
public int Fibonacci(int n) {
if(n<=0)
{
return 0;
}
else if(n==1 || n==2)
{
return 1;
}
int f_small= 1; //f(n-1)
int f_big = 1; //f(n-2)
int res = 0;
for(int i = 3; i <= n; i++ )
{
//第i个月的总数
res = f_small + f_big;
//下个月小兔子和这个月的大兔子数目一致
f_small = f_big;
//下个月的大兔子是上个月兔子的和
f_big = res;
}
return res;
}
}