public class Demo {
/**
* 需求:斐波那契数列
* 有一对兔子,从第三个月起都生一对兔子,小兔子长到第三个月后每一对都生一对兔子,加入兔子都不死,问第20个月共有多少兔子
*
* 月份: 1 2 3 4 5 6 7 8 9 10 11...
* 兔子(对): 1 1 2 3 5 8 13 21 34 55 89...
*/
public static void main(String[] args) {
/**
* 使用for循环
* 定义一个数组,长度是20,每一个元素就是兔子的对数
*/
int[] arr = new int[20];
arr[0]=1;
arr[1]=1;
for(int x=2;x<arr.length;x++){
arr[x] = arr[x-1]+arr[x-2];
}
System.out.println(arr[19]);
System.out.println("======================");
System.out.println(getCount(20));
}
/**
* 使用递归
* 递归方法作用:计算对应月份的兔子对数
*/
public static int getCount(int n){
if(n==1||n==2)
return 1;
else
return (getCount(n-1)+getCount(n-2));
}
}
但是如果只求斐波那契数列 1、1、2、3、5、8、13、21、34......
求第30位数是多少, 用递归算法实现就简单多了
public class Test{
public static void main (String[] args){
getJieCeng(30);
}
public static int getJieCeng(int n){
if(n==1||n==2)
return 1;
else
return getJieCeng(n-1)+getJieCeng(n-2);
}
}
|