加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

兔子生崽问题:裴波纳契数列的另一种使用,数组传递【转载】

(2016-11-17 15:57:17)
兔子生崽
实验内容:假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么,如果每对成
兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子
开始繁殖,以后各月的可有多少对兔子?
实验说明:这是13世纪意大利Fibonacci借助民间的“兔子生崽”问题引入的一个著名的
递推数列即Fibonacci数列。采用递推分析法:第0个月兔子对数f(0)=1;第1个月兔子对数
f(1)=2;第2个月兔子对数f(2)=3;第n个月兔子对数f(n)=f(n-1)+f(n-2)
运行效果:一对兔子开始繁殖,以后各月的兔子对数:
不用子函数计算结果:
1 2 3 5 8 13 21 34 55 89 144 233
用子函数计算结果:
1 2 3 5 8 13 21 34 55 89 144 233
目的要求:体会递推算法是把科学或工程计算中数学模型转变为计算机运算模型的重要
方法。掌握数组、指针的编程,求各月的有多少对兔子用或不用一个子函数实现。以后实验
都必须采用模块化的程序设计方法,每个子任务对应一个子函数,完成总任务的程序由一个
主函数和若干子函数组成,主函数起任务调度的总控作用。理解模块化程序设计方法,掌握
函数的实现、调用编程技术。

答案:
调用子函数:
#include 
int fun(int n)              //用递归算法求斐波那契数列
{
if(n==0)                       
return 1;                   //n=0的时候是一只兔子
else if(n==1) 
return 2;                   //n=1的时候是两只只兔子
else
return fun(n-1)+fun(n-2);   //从n=2开始,每个月的兔子数量都是前两个月相加
}
void main() 
 int n=12,i;
 for(i=0;i
 printf("%d ",fun(i));
 }
}


不调用子函数:
#include      
void main()  
{  
   int a[12] ={1,2};                  //定义一个数组
   int i;
   printf("%d %d ",a[0],a[1]);        //输出前两个月的兔子数量
   for(i=2;i<12;i++)  
   {  
      a[i]=a[i-1]+a[i-2];        //从第三个月开始,每个月的兔子数量都是前两个月的和
      printf("%d ",a[i]);       //打印
   }

原网址:
https://zhidao.baidu.com/question/442796366.html

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有