题目:古典问题(斐波纳契数列):有一对兔子,从出生后3个月起每个月都生一对兔子,小兔子长到第三个月又会生一对兔子,假如兔子都不死,问每个月兔子总数?
分析规律:1 1 2 3 5 8 13 21…
从第二个月以后每个月兔子总数是前两个月兔子总数之和
1.递归算法:效率灰常低
package com.math.forth;
/***
* 古典问题(斐波纳契数列):有一对兔子,从出生后3个月起每个月都生一对兔子,小兔子长到第三个月又会生一对兔子,假如兔子都不死,问每个月兔子总数? 分析:规律
* 1 1 2 3 5 8 13 21... 从第二个月以后每个月兔子总数是前两个月兔子总数之和
*
* @author wql
*
*/
public class Math01 {
public static void main(String[] args) {
int month = 2;// 给一个月数
int sum;// 兔子总数
for (int i = 1; i <= month; i++) {
sum = method(i);
}
System.out.println(sum);
}
public static int method(int month) {
if (month <= 2) {
return 1;
} else {
return method(month - 1) + method(month - 2); // 递归:这种方法效率非常低
}
}
}
2.利用时间的复杂度逻辑计算,效率灰常高(int类型都不可以满足运算)
package com.math.forth;
/**
* @author wql
*
*/
public class Math01 {
public static long method2(int month){
long a=1;
long b=1;
long c=0;
if(month==1||month==2)
{
return 1;
}
else
{
for(int i=3;i<=month;i++)
{
c=a+b;
b=a;
a=c;
}
return a;
}
}
public static void main(String[] args) {
int month=100;//给一个月份
long sum=method2(100);
System.out.println(sum);
}
}