A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

11 个回复

倒序浏览
递归……
回复 使用道具 举报
关于不死兔的算法

回复 使用道具 举报

用的递归。

本帖最后由 TS-松子 于 2016-6-9 00:22 编辑
  1. package demo10;

  2. import java.util.Scanner;


  3. class Demo{
  4.         public static void main(String[] args){
  5.                 //键盘录入要算的月数
  6.                 Scanner sc = new Scanner(System.in);
  7.                 System.out.println("请输入月数:");
  8.                 int month = sc.nextInt();
  9.                 //调用方法算出各时期的兔子数量的数组(刚出生的,一个月的,成熟的)
  10.                 int[] counts = getCounts(month);
  11.                 System.out.println("兔子总对数为:"+(counts[0]+counts[1]+counts[2]));
  12.         }

  13.         public static int[] getCounts(int month) {
  14.                 int[] count= {1,0,0};        //定义初始兔子数量的数组
  15.                 if (month<0) {
  16.                         throw new RuntimeException("输入的月数有误!");
  17.                 }
  18.                 if (month==0) {               
  19.                         return count;
  20.                 }
  21.                 count = getCounts(month-1);        //得到上个月兔子数量的数组
  22.                 int temp = count[2];        //记录上个月成熟的兔子数
  23.                 count[2] += count[1];        //成熟的兔子等于上个月成熟的兔子加上一个月的兔子
  24.                 count[1] = count[0];        //一个月的兔子数等于上个月刚出生的兔子数
  25.                 count[0] = temp;        //刚出生的兔子数等于上个月的成熟兔子数
  26.                 return count;
  27.                
  28.         }
  29. }
复制代码
回复 使用道具 举报 1 0
666666666666666666666
回复 使用道具 举报
这都是大神啊
回复 使用道具 举报
谢谢{:2_30:}
回复 使用道具 举报
Fangjie 发表于 2016-6-8 21:30
关于不死兔的算法

谢谢!!!!大神
回复 使用道具 举报
可以用递归做
  1. package cn.itcast.递归;
  2. /*
  3. * 需求:
  4. *                 有一对兔子,第一个月是一对,第二个月还是一对,第三个月生了一对娃就是两对,第四个月就是三对,第五个月五对...
  5. *                 1,1,2,3,5,8,...为斐波那契数列
  6. * */
  7. public class Rabbit {
  8.         public static void main(String[] args) {
  9.                 //定义方法,传入月份。
  10.                 recursion(5);
  11.                 System.out.println(recursion(10));
  12.         }

  13.         private static int recursion(int i) {
  14.                 //第一个月和第二个月都是一对,为初始条件
  15.                 if(i==1||i==2){
  16.                         return 1;
  17.                 }else {
  18.                         return recursion(i-2)+recursion(i-1);//每一个月都是前两个月之和,比如五月,就是三月和四月数量的和
  19.                 }
  20.         }
  21.        
  22. }
复制代码
回复 使用道具 举报

这种代码还简单些!
回复 使用道具 举报
昨天递归
回复 使用道具 举报
Fangjie 发表于 2016-6-9 18:36
这种代码还简单些!

恩!还可以,就是理解难一点,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马