首页 > 代码库 > 古典问题:关于兔子的生命周期。
古典问题:关于兔子的生命周期。
面试题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一
对兔子,假如兔子都不死,问每个月的兔子总数为多少?
package com.collection; import java.util.Arrays; public class RecursiveDemo { public static void main(String[] args) { /** * 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 *对兔子,假如兔子都不死,问每个月的兔子总数为多少? * *已知开始已有一对兔子(A), * 第1个月:A兔子 =1对 * 第2个月:A兔子 =1对 * 第3个月:大兔子A生了小兔子B =2对 * 第4个月:大兔子A生了小兔子C, A+B+C=3对。。 注:兔子满3个月后,就每月都生一对。 * 第5个月:大兔子A生了小兔子D,大兔子B(满3个月)生了小兔子E。 A+B+C+D+E=5对。 * 第6个月:大兔子A生了小兔子F,大兔子B生了小兔子G,大兔子C生了小兔子H。 A+B+C+D+E+F+G+H= 8对 * ..... * 规律:1,1,2,3,5,8... * 从第3位开始的数之和来自前两位。 */ //已知数据。 int num = 1; int two = 1; /** * 第1个月 * num=1,two=1 * 第2个月 * num=1,two=2 * 第3个月 * num=2,two=3 * 第4个月 * num=3,two=5 * 第5个月 * num=5,two=8 * 规律发现:num是以前的two,而two是等于之前num+two。 */ for(int x = 3;x <= 20;x++) { int temp = two;//记录之前two two = num+two;//将前num与two相加等于two, num = temp;//再将之前的tow赋给num System.out.println(num+"***"+two); } System.out.println("count="+two); /** 1***2 2***3 3***5 5***8 8***13 13***21 21***34 34***55 55***89 89***144 144***233 233***377 377***610 610***987 987***1597 1597***2584 2584***4181 4181***6765 */ int[] arr = new int[20]; arr[0] = 1; arr[1] = 1; for(int x = 2; x < arr.length;x++) { /** * x = 2:表示第3月 * arr[2] = arr[0] + arr[1]; //此时数组数量为:arr[0] = 1,arr[1] = 1,arr[2] = 2 * x = 3:表示第4月 * arr[3] = arr[2] + arr[1]; //此时数组数量为:arr[0] = 1对,arr[1] = 1对,arr[2] = 2对,arr[3] = 3对 * x = 4:表示第5月 * arr[4] = arr[3] + arr[2]; //此时数组数量为:arr[0] = 1对,arr[1] = 1对,arr[2] = 2对,arr[3] = 3对 ,arr[4] = 5对 * x = 5:表示第6月 * arr[5] = arr[4] + arr[3]; //此时数组数量为:arr[0] = 1对,arr[1] = 1对,arr[2] = 2对,arr[3] = 3对 ,arr[4] = 5对,arr[5] = 8对 * x = 6:表示第7月 * arr[6] = arr[5] + arr[4]; //此时数组数量为:arr[0] = 1对,arr[1] = 1对,arr[2] = 2对,arr[3] = 3对 ,arr[4] = 5对,arr[5] = 8对,,arr[6] = 13对 */ arr[x] = arr[x-1] + arr[x-2];//3月=第3-1月+第3-2月 4月=第4-1月+第4-2月 } System.out.println("count="+arr[arr.length-1]); //递归实现 System.out.println("count="+rec(20)); } /** * 递归特点:先分解,再合并! * 1,1,2,3,5,8,13 */ public static int rec(int i) { if(i==1 || i==2) return 1; else return rec(i-1)+rec(i-2); } }
古典问题:关于兔子的生命周期。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。