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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© limxing 高级黑马   /  2015-1-17 22:11  /  3793 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
题目:古典问题:有一对兔子,从出生后第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);
       }
}






17 个回复

倒序浏览
看了就晕,又是递归。。。。。
回复 使用道具 举报
I'can'do'it 发表于 2015-1-17 22:18
看了就晕,又是递归。。。。。

额,不都是这样子
回复 使用道具 举报
答案好简洁。。。这种没一点多余的代码还是要靠经验总结啊
回复 使用道具 举报
递归视频里讲得很好理解
1,找到出口        
2,找到规律

这题的规律就是第三个月后兔子等于前两个月之和
所以代码写成 return fun(n-1)+fun(n-2)
出口就是已经知道固定的值
前两个月的兔子数
if(n==1|| n==2)
          return 1;
回复 使用道具 举报
这实质就是斐波那契数列嘛
回复 使用道具 举报
翻一翻递归,答案就浮在纸上了。
回复 使用道具 举报
其实难点就是找数字规律,像兔子这道题就是斐波那契数列。数列1,1,2,3,5,8,13,21.... 前面两项之和等于后面一项。
找到这个规律写个函数就出来了。
回复 使用道具 举报
希冀 中级黑马 2015-1-18 00:38:38
9#
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);                 }         }  }
回复 使用道具 举报
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);
                }
        }

}
回复 使用道具 举报
return fun(n-1)+fun(n-2);这个不懂。到底是什么意思呢?
回复 使用道具 举报
不给吃鸭梨 来自手机 中级黑马 2015-1-18 10:00:54
12#
首先,你得理解一下递归。

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

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

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

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

大概这么多,就不写代码了手机不方便。
回复 使用道具 举报
不给吃鸭梨 发表于 2015-1-18 10:00
首先,你得理解一下递归。

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

谢谢啦!
回复 使用道具 举报
希冀 发表于 2015-1-18 00:45
class  TuZi
{
        public static void main(String[] args)

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

就是写代码的时候规范问题
回复 使用道具 举报
limxing 发表于 2015-1-18 10:03
什么意思,不过我这个程序运行结果应该没错吧

你的程序运行后结果有错误
回复 使用道具 举报
希冀 发表于 2015-1-18 10:35
你的程序运行后结果有错误

啊 不会吧
回复 使用道具 举报
希冀 发表于 2015-1-18 10:35
你的程序运行后结果有错误

我知道了 我这个程序本身就是错误的!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马