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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 西贝 中级黑马   /  2016-1-30 09:23  /  1831 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

8 个回复

倒序浏览
  1. public static int rabbits(int months){
  2.              if(months==1||months==2) return 1;
  3.              else return rabbits(months-1)+rabbits(months-2);
  4.     }
复制代码

设月份为x,兔子数为f(x),f(1)=1;f(2)=1;f(3)=2;f(4)=3;f(5)=5;f(6)=8;f(7)=13..依次类推,推出f(x)=f(x-1)+f(x-2) (x>=3),利用递归思想可写出方法。


评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

回复 使用道具 举报 1 0
1、1、2、3、5、8、13、21、34
回复 使用道具 举报
支持黑马的顶起来~~~
回复 使用道具 举报 1 0
斐波那契数列。。。。突然想到一道类似的题,,
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
M由键盘输入,表示楼梯的级数。
给楼下的人解,解了我让洋葱大大给技术分。。
回复 使用道具 举报
  1. package com.heima;

  2. import java.util.Scanner;

  3. public class Test5 {

  4.         public static void main(String[] args) {
  5.                 Scanner sc = new Scanner(System.in);
  6.                 System.out.println("请输入台阶:");
  7.                 while (true) {
  8.                         int step = sc.nextInt();
  9.                         System.out.println("共有" + rountines(step) + "种方法上第" + step + "台阶");
  10.                 }
  11.         }

  12.         public static int rountines(int step) {
  13.                 int routine = 0;
  14.                 if (step == 1 || step == 2)
  15.                         return 1;

  16.                 routine += rountines(step - 1);
  17.                 routine += rountines(step - 2);
  18.                 return routine;
  19.         }
  20. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 j6819236 于 2016-1-31 15:13 编辑
酱油 发表于 2016-1-30 23:33
斐波那契数列。。。。突然想到一道类似的题,,
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或 ...

package com.heima;

import java.util.Scanner;

public class Test5 {

        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入台阶:");
                while (true) {
                        int step = sc.nextInt();
                        System.out.println("共有" + rountines(step) + "种方法上第" + step + "台阶");
                }
        }
//这个方法就是逆向思维,你要走到M级,我就每一次减一步或者两步直到剩最后一步或者两步(两步是因为之后只能退一步了)至第1层阶梯。        public static int rountines(int step) {   //step代表当前所在的阶梯位置
                int routine = 0;          //定义一个统计变量统计有多少种方法
                if (step == 1 || step == 2)
                        return 1;         //成功递归退至第1层阶梯,要上第二层阶梯只能从第一层走一步 ,return routine=1;

              //要上 step的阶梯数,只要用上step-1的方法数加上step-2的方法数就可以求得,以此递归即可。
                routine += rountines(step - 1);
                routine += rountines(step - 2);
                return routine;   //返回上step层阶梯方法总数
        }
}

回复 使用道具 举报
酱油 高级黑马 2016-1-31 14:34:49
8#
j6819236 发表于 2016-1-31 13:26
package com.heima;

import java.util.Scanner;

可以可以,我去找你们洋葱大大来给你分,。,。,话说你可以把思路贴出来,给大家看一下,,
回复 使用道具 举报
传说中的不死神兔。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马