Fibonacci数列:斐波那契数列也叫兔子数列:
由来:
如果一对兔子每月能生一对小兔(一雄一雌),而每对小兔在牠出生後的第三个月裡,又能开始生一对小兔,假定在不发生死亡的情況下,由一对出生的小兔开始,50个月后会有多少对兔子?
在第一个月时,只有一对小兔子,过了一个月,那对兔子成熟
了,在第三个月时便生下一对小兔子,这时有兩对兔子。再过
多一个月,成熟的兔子再生一对小兔子,而另一对小兔子长大
,有三对小兔子。如此推算下去,我们便发現一个規律:
时間(月) | 初生兔子(对) | 成熟兔子(对) | 兔子總數(对) |
1 | 1 | 0 | 1 |
2 | 0 | 1 | 1 |
3 | 1 | 1 | 2 |
4 | 1 | 2 | 3 |
5 | 2 | 3 | 5 |
6 | 3 | 5 | 8 |
7 | 5 | 8 | 13 |
8 | 8 | 13 | 21 |
9 | 13 | 21 | 34 |
10 | 21 | 34 | 55 |
由此可知,从第一个月开始以后每个月的兔子总數是:
1,1,2,3,5,8,13,21,34,55,89,144,233…
若把上述數列继续写下去,得到的數列便称为斐波那契數列。
數列中每個數便是前兩个數之和,而數列的最初兩個數都是1。
若设 F0=1, F1=1, F2=2, F3=3, F4=5, F5=8, F6=13...
则:当n>1時,Fn+2 = Fn+1 + Fn,而 F0=F1=1。
1,1,2,3,5,8,13,21,34,55,89……F(n)=F(n-1)+F(n-2);
用C#代码实现的话就是:
public static int FindNumber(int n)
{
int result;
if(n==0||n==1)
{
result=1;
}
else
{
result = FindNumber(n - 1) + FindNumber(n - 2);
}
return result;
}
用Js代码实现:
function (n){
if(n<0) return ;
if(n==0||n==1) return 1;
return arguments.callee(n-1)+arguments.callee(n-2);//argumetns.callee:函数体内部对象相当于回调执行函数体本身
}