黑马程序员技术交流社区

标题: 兔子繁殖的问题 [打印本页]

作者: 不再上网    时间: 2014-8-22 01:25
标题: 兔子繁殖的问题
题目是:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问某个月的兔子总数为多少?
网上找到的代码都是C的。有哪位大神可以帮忙搞个JAVA的来学习下嘛?最好可以带上注释的

作者: 依然超级赛亚人    时间: 2014-8-22 07:05
  1. /*
  2. * 这是递归问题,也是数学中的斐波那契数列问题,规律就是前两个数字之和等于第三个数。
  3.              月份         兔子数目     
  4.                 1                 1
  5.                 2                 1
  6.                 3                 2
  7.                 4                 3
  8.                 5                 5
  9.                 6                 8
  10.                 ....               .....
  11.                 兔子数目的规律已经很明显了吧?前两月的数目之和等于第三个月,以此类推。
  12.                 前两个月有点区别,就是此时没有新兔子降生,所以把它单独作为分段函数中的
  13.                 一种情况,所以这个问题用分段函数表示就是:
  14.                 {f(x)=1 , x=1或x=2
  15.                 {f(x)=f(x-1)+f(x-2) ,x>2
  16.                 用java语言表示就是下面的程序。
  17. *
  18. *
  19. * */
  20. public class Tuzi {
  21.         public static void main(String[] args) {
  22.                 //求第十个月的兔子数目,可以自己略微改动求其他数,但不要太大,递归数太大内存容易溢出。
  23.                 int i = 10;
  24.                 //调用tuziNum()方法,直接打印结果。
  25.                 System.out.println("第"+i+"个月的兔子对数为:"+tuziNum(i));
  26.         }
  27.     //定义了一个求兔子数目是方法。
  28.         private static int  tuziNum(int i) {
  29.                 if(i==1||i==2){//当月份是1或2时,兔子数目都是1,这两种情况下直接返回1.
  30.                         return 1;
  31.                 }else{
  32.                         return tuziNum(i-1)+tuziNum(i-2);//第三个月开始,该月兔子数目等于前两月数组之和,返回这个和。
  33.                 }
  34.                
  35.         }
  36. }
复制代码

作者: Kikyou    时间: 2014-8-22 08:22
这个有很多啊
作者: 谢建平    时间: 2014-8-22 09:27
第一个月2只  第三个月 4只  第6个月 8只     第N月=2* 2的N/3次方  
作者: 唐覃利    时间: 2014-8-22 20:40
看看                          
作者: 子阳zy    时间: 2014-8-22 20:53
package jichu;
import java.util.*;
public class Rabbit {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Scanner s =new Scanner(System.in);
                System.out.println("请输入第几个月");
                int n=s.nextInt        ();
System.out.println("第"+n+"个月的兔子是"+shu(n));
               
        }
        private static int shu(int n) {
               
                if(n<3)
                       
                        return 1;
                       
                else       
                return shu(n-1)+shu(n-2);
       
        }

        }





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2