参考:http://episte.math.ntu.edu.tw/articles/sm/sm_02_08_1/index.html
假定一对兔子在它们出生整整兩个月以后可以生一对小兔子,其后每隔一个月又可以再生一对小兔子。假定现在在一个笼子里有一对大兔子和它们刚生下來的一对小兔子,请问一年以后笼子应该有几对兔子?
这实际上是一个费氏数列的问题。
百度百科:斐波纳契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……
第一个月月底兔子对数是 3,第二个月月底兔子对数是 5 ,……
我们写一个程序求第n个月之后有多少对兔子。
public class Fibonacci {
/**
* @param args
*/
public static void main(String[] args) {
Fibonacci fb=new Fibonacci();
System.out.println("一年之后兔子的对数是:"+fb.f(12));
}
public int f(int n){
if(n==1 )
return 3;
if(n==2)
return 5;
else
return f(n-1)+f(n-2);
}
}
结果:一年之后兔子的对数是:610
注:下面这种方法可以避免递归,因为 f(n)=f(n-1)+f(n-2); f(3)=f(2)+f(1) f(5)=f(4)+f(3) f(4)=f(3)+f(2) 可见这个问题用递归存在重复计算的问题
代码如下:
public int g(int n){
if( n==1)
return 3;
int a=3;
int b=5;
for(int i=3;i<=n;i++){
int temp=b;
b=a+b;
a=temp;
}
return b;
}