斐波那契数列兔子繁殖编程(斐波那契数列兔子问题递归)

http://www.itjxue.com  2023-03-05 17:02  来源:未知  点击次数: 

C语言编程题目 兔子繁衍问题?

方法一、用递归。

方法二、把兔子定义成结构,每个兔子自带计时器变量,繁殖就是新建节点,构建结构链表。每次循环遍历所有节点的计时变量大于3的就新建一个节点插入链表。最后统计节点数量。

我用方法1来写:

#include stdio.h

int childbirth(int bMth,int gMth)//bMth:调用时传0,gMth:经过的最大月数

{

? int cnt=0,n=bMth,num=2;

? while(n++gMth+1)

? ? ? if(cnt++2)

? ? ? ? ? num=num+childbirth(n,gMth+1);

? return num;

}

int main()

{

? int i,n;

? printf("请输入经过多少月:"),scanf("%d",n);

? for(i=1;i=n;i++)

? ? ? printf("经过%d个月后:兔子数量为:%d\n",i,childbirth(0,i));

? return 0;

}

如何用Java程序编程,最好讲解一下。题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对

这道题目考察的是运用递归(数列)的思路去解决问题。

假设到第24个月,示例代码如下:

public class woo {

public static void main(String args[]) {

System.out.println(fib(24));

}

private static int fib(int n) {

if (n == 1 || n == 2) {

return 1;

} else {

return fib(n - 1) + fib(n - 2);

}

}

}

扩展资料:

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……。

在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

参考资料:

百度百科:斐波那契数列

百度百科:递归函数

C语言编程:兔子繁殖问题

如图,此题难度较大,要用到队列(我优化为循环队列)(此题有两个提问,都是我回答所以一样)

运行结果,兔子数量变化符合斐波那契数列(下面一行数字为0~6岁每半岁兔子数量)

源代码:(网页端才完整)

#includestdio.h

#define?LIFETIME?13 //兔子寿命,单位半年(年龄小于此!)

#define?INITNUM?1 //初始兔子有多少对

main()

{

int?hY=0; //兔子历(就是时刻表):单位:半年

int?num[LIFETIME]={INITNUM,0}; //存储不同年龄兔子的对数(初始为0岁1对)

//babyI下标代表0岁,往前年龄增大,越过数组下界跳到上界,所以babyI+1反而是最老兔子

int?babyI=0; //0岁兔子对应下标,年龄单位为半年

int?loveNum=0; //可生育兔子数量

int?totalNum=INITNUM; //总计兔子数量

int?age1I=LIFETIME-2; //1岁兔子对应下标(开始能生育)

int?age5_5I=LIFETIME-11; //1岁、5.5岁兔子对应下标(刚好能生育、刚好不能生育年龄)

int?n=30; //输入n半年后!

while(hY?=?n){

int?i,j; //遍历临时变量。①展示兔子数量。

printf("第%.1f年\t总计:%d对\t可生育:%d对\n",(float)hY/2,totalNum,loveNum);

/*

for(i=0;?iLIFETIME;?i++){

printf("%.1f岁\t",(float)i/2?); //打印表头

//printf("%d,%.1f岁\t",i,(float)(++i)/2?); //打印表头

}printf("单位:对\n"); //换行*/

i=babyI; //显示各年龄对应数量

j=0;

do{

//printf("%d\t",num[i]);

if(hY21){ //仅用于加\t显示

if((++j)%2==0)printf("\t");}

printf("%d?",num[i]);

if(i0)i--; //下标循环往左移动

else?i=LIFETIME-1;

}while(i!=babyI);

printf("\n"); //换行

//②半年后

hY++; //时间过去半年

age1I=?(age1I+1)%LIFETIME?; //1岁数量(对)对应下标

age5_5I=?(age5_5I+1)%LIFETIME?;//5.5岁数量(对)对应下标

//printf("%d,%d\n",age1I,age5_5I);

loveNum?+=?num[age1I]?-num[age5_5I]; //可生育兔子数量(对)

babyI?=?(babyI+1)%LIFETIME; //新babyI设为原最老兔子的下标,

totalNum?+=?loveNum?-?num[babyI]; //每对大兔子可以生一对小兔子?-?死亡的老兔

num[babyI]?=?loveNum?; //老兔的位置换成新兔

}

}

(责任编辑:IT教学网)

更多

相关3DMAX教程文章

推荐3DMAX教程文章