黑马程序员技术交流社区

标题: 问每个月的兔子对数为多少? [打印本页]

作者: limxing    时间: 2015-1-17 22:11
标题: 问每个月的兔子对数为多少?
/*
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?

程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

思路:
        1、创建类名为class TuZi
        2、创建主函数
        3、初始化前两个月兔子对数 int m1=1,m2=1,num=0;
        4、打印前两个月数据
        4、使用for循环,初始化按照月份循环增加;for(int x=3;x<12;x++)
        5、构造运算方法:num=m1+m2;m1=m2;m2=num;
        6、输出打印每个月份兔子的对数:
*/
class  TuZi
{
        public static void main(String[] args)
        {
                int m1=1,m2=1,num;
                System.out.println("第1个月兔子对数为"+m1);
                System.out.println("第2个月兔子对数为"+m2);
                for(int x=3;x<12;x++)
                {
                        num=m1+m2;
                        m1=m2;
                        m2=num;
                        System.out.println("第"+x+"个月"+"兔子对数为"+num);
                }
        }

}
大家给我评价评价。。。我感觉怎么和标准答案差距这么大呢?
标准答案是:
public class Prog1{
       publicstatic void main(String[] args){
              intn = 10;
              System.out.println(""+n+"个月兔子总数为"+fun(n));
       }
       privatestatic int fun(int n){
              if(n==1|| n==2)
                 return 1;
              else
                 return fun(n-1)+fun(n-2);
       }
}







作者: I'can'do'it    时间: 2015-1-17 22:18
看了就晕,又是递归。。。。。
作者: limxing    时间: 2015-1-17 22:21
I'can'do'it 发表于 2015-1-17 22:18
看了就晕,又是递归。。。。。

额,不都是这样子
作者: Never、saydie    时间: 2015-1-17 23:16
答案好简洁。。。这种没一点多余的代码还是要靠经验总结啊
作者: caobin    时间: 2015-1-17 23:21
递归视频里讲得很好理解
1,找到出口        
2,找到规律

这题的规律就是第三个月后兔子等于前两个月之和
所以代码写成 return fun(n-1)+fun(n-2)
出口就是已经知道固定的值
前两个月的兔子数
if(n==1|| n==2)
          return 1;
作者: 淡看流光行远    时间: 2015-1-17 23:31
这实质就是斐波那契数列嘛
作者: 撬佳人丶    时间: 2015-1-18 00:08
翻一翻递归,答案就浮在纸上了。
作者: 探寻者    时间: 2015-1-18 00:28
其实难点就是找数字规律,像兔子这道题就是斐波那契数列。数列1,1,2,3,5,8,13,21.... 前面两项之和等于后面一项。
找到这个规律写个函数就出来了。
作者: 希冀    时间: 2015-1-18 00:38
class  TuZi {         public static void main(String[] args)          {                 int m1=1,m2=1,num=m1;                 System.out.println("第1个月兔子对数为"+m1);                 System.out.println("第2个月兔子对数为"+m2);                 for(int x=3;x<12;x++)                 {                                                    m1 = m2;                                                 m2 = num;                                                 num=m1+m2;                         System.out.println("第"+x+"个月"+"兔子对数为"+num);                 }         }  }
作者: 希冀    时间: 2015-1-18 00:45
class  TuZi
{
        public static void main(String[] args)
        {
                int m1=1,m2=1,num=1;
                System.out.println("第1个月兔子对数为"+m1);
                System.out.println("第2个月兔子对数为"+m2);
                for(int x=3;x<12;x++)
                {
                                                   m1 = m2;
                                                m2 = num;//在循环内num的值是不断变化的 第三个月num才参与运算所以需要先给m2赋值
                                                num=m1+m2;
                        System.out.println("第"+x+"个月"+"兔子对数为"+num);
                }
        }

}
作者: java小兵    时间: 2015-1-18 09:53
return fun(n-1)+fun(n-2);这个不懂。到底是什么意思呢?
作者: 不给吃鸭梨    时间: 2015-1-18 10:00
首先,你得理解一下递归。

一个问题我们可以分解为大问题和n和小问题,而大问题又能继续分解,这样通过分解我们可以得到最终的问题解决方案——可以理解为递

通过解决方案,向上整合,最后获得最终答案——理解为归

在这道题上看,解决方案就是控制条件也可以叫出口,整合的过程就是规律。

所以两步,底层解决就是数列前两项的数目明确。
规律就是前两项的和等于后两项。

大概这么多,就不写代码了手机不方便。
作者: limxing    时间: 2015-1-18 10:01
不给吃鸭梨 发表于 2015-1-18 10:00
首先,你得理解一下递归。

一个问题我们可以分解为大问题和n和小问题,而大问题又能继续分解,这样通过分 ...

谢谢啦!
作者: limxing    时间: 2015-1-18 10:03
希冀 发表于 2015-1-18 00:45
class  TuZi
{
        public static void main(String[] args)

什么意思,不过我这个程序运行结果应该没错吧
作者: limxing    时间: 2015-1-18 10:04
探寻者 发表于 2015-1-18 00:28
其实难点就是找数字规律,像兔子这道题就是斐波那契数列。数列1,1,2,3,5,8,13,21.... 前面两项之和等于后面 ...

就是写代码的时候规范问题
作者: 希冀    时间: 2015-1-18 10:35
limxing 发表于 2015-1-18 10:03
什么意思,不过我这个程序运行结果应该没错吧

你的程序运行后结果有错误
作者: limxing    时间: 2015-1-18 13:09
希冀 发表于 2015-1-18 10:35
你的程序运行后结果有错误

啊 不会吧
作者: limxing    时间: 2015-1-18 13:10
希冀 发表于 2015-1-18 10:35
你的程序运行后结果有错误

我知道了 我这个程序本身就是错误的!!!!!




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