您的位置 首页 java

使用java实现有趣的斐波那契数列之不死神兔

问题描述

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子 对数 为多少?

问题分析

分析:从第一个兔子开始,第1个月1对兔子,由于“长到第三个月后每个月又生一对兔子”,所以第2个月也是1对兔子,第3个月时可以生一对兔子,所以总数为2对,这时,其中有一对是以后每个月都可以生一对兔子的老兔子,另一对是一对新兔子,它只有在第三个月的时候才可以每个月生一对兔子;这样的话,第4个月的兔子总数为3对,…以此类推,从第1个月到第12个月的兔子总对数分别为:1,1,2,3,5,8,13,21,34,55,89,144

发现规律

A:从第三项开始,每一项是前两项之和

B:而且说明前两项是已知的

代码实现

A:变量的变化实现

public static void main(String[] args) {
 //要计算的月数
 int month = 12;
 //兔子总对数
 int count = 0;
 //上个月的总对数,初始化为2月的,有1对
 int num1 = 1;
 //上上个月的总对数,初始化为1月的,有1对
 int num2 = 1;
 for (int i = 3; i <=12 ; i++) {
 count = num1 + num2;
 num2 = num1;
 num1 = count;
 System.out.println("第"+i+"个月有"+count+"只兔子!");
 }
}
 

B:数组实现

public static void main(String[] args) {
 // 定义一个数组,存放每个月兔子的总对数
 int[] arr = new int[12];
 arr[0] = 1;
 arr[1] = 1;
 // arr[2] = arr[0] + arr[1];
 // arr[3] = arr[1] + arr[2];
 // ...
 for (int x = 2; x < arr.length; x++) {
 arr[x] = arr[x - 2] + arr[x - 1];
 }
 //打印每一个月兔子的总对数
 for (int i= 1; i < arr.length; i++) {
 System.out.println("第"+i+"个月有"+arr[i]+"对兔子!");
 }
}
 

C:递归实现

public class Test003 {
 /**
 * 递归计算兔子数量
 * @param month
 * @return
 */ public static int getRabbitNum(int month) {
 if (month == 1 || month == 2) {
 return 1;
 } else {
 return getRabbitNum(month - 1) + getRabbitNum(month - 2);
 }
 }
 public static void main(String[] args) {
 int month = 12;
 System.out.println("第"+month+"个月有"+getRabbitNum(12)+"对兔子!");
 }
}
 

文章来源:智云一二三科技

文章标题:使用java实现有趣的斐波那契数列之不死神兔

文章地址:https://www.zhihuclub.com/182863.shtml

关于作者: 智云科技

热门文章

网站地图