黑马程序员技术交流社区
标题: 关于兔子生兔子的一个景点问题的提问 [打印本页]
作者: 刘建龙 时间: 2012-6-14 21:46
标题: 关于兔子生兔子的一个景点问题的提问
本帖最后由 刘建龙 于 2012-6-20 14:12 编辑
今天看到一道题:但是算了半天也没有找到规律!虽然看了答案,但是还是不清楚该如何思考,运算。特此求助!请各位大神详细的讲解一下这类题的思考方法,及编程技巧,特此感谢!
题目如下:
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
代码如下:
public class Prog1{
public static void main(String[] args){
int n = 10;
System.out.println("第"+n+"个月兔子总数为"+fun(n));
}
private static int fun(int n){
if(n==1 || n==2)
return 1;
else
return fun(n-1)+fun(n-2);
}
}
初出茅庐,请勿见笑!
作者: 黑马-许泽宇 时间: 2012-6-14 21:50
就是斐波拉契数列嘛,有什么难得...
作者: 刘建龙 时间: 2012-6-14 21:53
黑马-许泽宇 发表于 2012-6-14 21:50
就是斐波拉契数列嘛,有什么难得...
哦!有什么讲解不?是斐波拉切数列啊!有个链接也好啊!我先百度去了
作者: 黑马-许泽宇 时间: 2012-6-14 22:08
就是一个简单的递归算法嘛..你会递归就觉得很简单了,.所以你只需要百度知道递归怎么用就成
作者: 王明明 时间: 2012-6-14 22:22
本帖最后由 王明明 于 2012-6-14 22:40 编辑
- public class Prog1{
- public static void main(String[] args){
- int n = 10;
- System.out.println("第"+n+"个月兔子总数为"+fun(n));
- }
- private static int fun(int n){
- if(n==1 || n==2) // 这个地方是判断1月份 跟2月份的 因为1 2月 兔子 都是1对 所以返回1
- return 1;
- else
- return fun(n-1)+fun(n-2); //这个地方就是第三月份开始的了 这个得出的数列公式 数学问题
- }
- }
复制代码 斐波那奖数列:
1,1,2,3,5,8,13,21,34,55,89,144,233,377......
其规律是从第三项起,每一项都是前两项的和.用递推公式表达就是:
a1=a2=1,
an=an+1十an-2(n>=3)
将值带入公式an=an+1十an-2(n>=3)
con(n) = con(n - 1) + con(n - 2) (n>=2)
我前不久写的- public class Test
- {//用递归法计算兔子的规律
- static long fib(int x)
- {
- if(x>2)
- return (fib(x-1)+fib(x-2));
- else return 1;
- }
- public static void main(String[] args)
- {
- for(int i=1;i<=24;i++)
- {
- long n=fib(i);
- System.out.println("第"+i+"个月有兔子对数为"+n);
- }
- }
- }
复制代码 这个是我以前 百度 看到的这么写 因为当月的兔子等于前两项的和
这是十个月之后的兔子总数
package com.string.to;
public class TuZI {
public static void main(String args[]){
int m=1,n=1,tmpN;//声明3个变量(int类型的 )
for(int month=3;month<=10;month++){
tmpN=n;//让tmpN=n,也就是1
n=m+n;//然后让m和n相加,既n=1+1=2;
m=tmpN;//然后再把tmp的值1付给m,既m=2
} //继续循环
System.out.println(n);
}
}
作者: 王晓新 时间: 2012-6-14 22:25
- class Test
- {
- public static void main(String args[])
- {
- int [] Fib=new int [13];
- Fib[0]=1;Fib[1]=1;
- for(int i=2;i<=12;i++)
- Fib[i]=Fib[i-1]+Fib[i-2];
- for(int i=0;i<=12;i++)
- System.out.print(Fib[i]+" ");
- }
- }
复制代码 输出结果:1 1 2 3 5 8 13 21 34 55 89 144 233
作者: 张_涛 时间: 2012-6-14 22:39
首先,必须写出一些数据,从而发现规律进行归纳,这是数学基础,归纳发现并总结规律
数据如表格
我们可以发现:
本月一个月大的兔子=上个月3个及以上大的兔子的个数+上个月2个月大的兔子的个数
本月二个月大的兔子=上个月1个月大的兔子的个数
本月三个月大的兔子=上个月3个及以上大的兔子的个数+上个月2个月大的兔子的个数
观察总数:
可以发现,第三个数据等于前两个数据之和,从而进行编程分析
这种问题要有耐心,画图,锻炼思想,个人比较喜欢,慢慢就熟练了。
-
fff.png
(6.6 KB, 下载次数: 21)
作者: 胡大强 时间: 2012-6-14 23:05
public class cc{
public static void main(String[] args){
int r[]=new int[12]; //创建数组r,表示12个月。。
r[0]=1; //表示1月 兔子对数
r[1]=1; //表示2月兔子对数
int len=r.length;
for(int i=2;i<len;i++){ //第三个月起
r[i]=r[i-1]+r[i-2];
}
for(int i=0;i<len;i++){
System.out.println("第"+(i+1)+"个月兔子总数为"+r[i]);
}
}
}
输出结果:
第1个月兔子总数为1
第2个月兔子总数为1
第3个月兔子总数为2
第4个月兔子总数为3
第5个月兔子总数为5
第6个月兔子总数为8
第7个月兔子总数为13
第8个月兔子总数为21
第9个月兔子总数为34
第10个月兔子总数为55
第11个月兔子总数为89
第12个月兔子总数为144
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |