黑马程序员技术交流社区
标题: 问每个月的兔子对数为多少? [打印本页]
作者: 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
额,不都是这样子
作者: 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
谢谢啦!
作者: limxing 时间: 2015-1-18 10:03
什么意思,不过我这个程序运行结果应该没错吧
作者: limxing 时间: 2015-1-18 10:04
就是写代码的时候规范问题
作者: 希冀 时间: 2015-1-18 10:35
你的程序运行后结果有错误
作者: limxing 时间: 2015-1-18 13:09
啊 不会吧
作者: limxing 时间: 2015-1-18 13:10
我知道了 我这个程序本身就是错误的!!!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |