编程题目:
39.兔子数列:有一对兔子,从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
示例代码:
package program.calculation.exercise39;
import java.util.Scanner;
/**
* 39.兔子数列:有一对兔子,从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子,
* 假如兔子都不死, 问每个月的兔子对数为多少?
* 分析: 兔子的规律可视为斐波那契数列1,1,2,3,5,8,13,21....
* 斐波那契数列(Fibonacci sequence):数列从第3项开始,每一项都等于前两项之和。
* 又称黄金分割数列、因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,
*/
public class FibonacciSequence {
public static void main(String[] args) {
System.out.println("请输入月份:");
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
System.out.println("第一种方式:");
int recurNumber = recurNumber(month);
System.out.println("第"+month+"个月,兔子的总数为"+recurNumber+"对!");
System.out.println("第二种方式:");
int loopNumber = loopNumber(month);
System.out.println("第"+month+"个月,兔子的总数为"+loopNumber+"对!");
}
//第一种方式:递归
private static int recurNumber(int month) {
if(1==month || 2==month){ //如果月份为1或2,结果为1
return 1;
}else { //否则,通过递归相加得出结果
return recurNumber(month-1)+recurNumber(month-2);
}
}
//第二种方式:循环
private static int loopNumber(int month) {
int number = 1;
int temp1 = 1;
int temp2 = 1;
for (int i=1;i<=month;i++) {
if(i <= 2) { //如果月份为1或2,结果为1
number = 1;
}else {
number = temp1+temp2; //把所有月份相加
temp2 = temp1; //把第一个月赋值给第二个月
temp1 = number; //把前两个月之和赋值给第一个月
}
}
return number;
}
}
结果显示:
版权声明:本文为jsc123581原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。