网站大量收购独家精品文档,联系QQ:2885784924

组合数学实验报告.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
组合数学实验报告

组合数学实验报告 班级:网络091班 姓名:郭静 学号:092566 实验一 Fibonacci数非递归解 一、实验题目 Fibonacci数列的定义如下: 请用递归方法和非递归方法求解该问题,各编写一个函数,要求函数接受的值,返回的值。 二、实验要求 1 分别求的情况。 2 对比两个程序的执行时间,然后分别对两种算法进行复杂性分析。 三、实验源程序 #include iostream #include time.h using namespace std; // 递归方式求解Fibonacci数列 double methodOneFibonacci(int n) { double result; if(n==1 || n==2) { result=1; } else { result=methodOneFibonacci(n-2)+methodOneFibonacci(n-1); } return result; } // 非递归方式求解Fibonacci数列 double methodTwoFibonacci(int n) { double result; double f1=1; double f2=1; if(n==1 || n==2) { result=1; } else { while(n-2) { result=f1+f2; f1=f2; f2=result; n--; } } return result; } double (*fibonacci)(int n); void deal(int n) { // 计算结果 double result; // 计算开始时间 clock_t start; // 计算结束时间 clock_t finish; // 计算花费的时间 double duration; start=clock(); result=fibonacci(n); coutthe result is resultendl; finish=clock(); duration=((double)(finish-start))/CLOCKS_PER_SEC; coutspent time is durationsendl; } int main(int argc,char* argv[]) { while(1) { // 参数,表述计算的规模 int n; coutinput the data n is: ; cinn; if(n0) { cout采用非递归的方法进行求解:endl; fibonacci=methodTwoFibonacci; deal(n); cout采用递归的方法进行求解:endl; fibonacci=methodOneFibonacci; deal(n); } else { coutn is wrong,please input the n again!endl; } } return 0; } 采用递归算法时消耗太多的时间。 五、实验总结 结果截图是递归算法与非递归算法的执行时间对比。 根据两种算法所写的程序的执行时间的的对比,非递归算法要比递归算法的效率要高很多。而且随着n的逐渐增大,非递归算法的效率要远远超过递归算法的效率。但是,采用递归算法编写的程序易于理解,并且易于编写。 实验二 二项式系数的加法求解 一、实验题目 编写一个程序,只用加法,求出中取个的组合数 二、实验要求 1 要求使用公式,采用递归方法和非递归方法进行求解 2 对两种算法进行分析 三、实验源程序 #include iostream #include time.h using namespace std; // 采用递归方法求解组合数 int MethodOneCombinatorics(int n,int r) { int result; if(r==0 || n==1 || n==r) { result=1; } else { result=MethodOneCombinatorics(n-1,r)+MethodOneCombinatorics(n-1,r-1); } return result; } // 采用非递归方法求解组合数 int MethodTwoCombinatorics(int n,int r) { int result; int C1=1; int C2=1;

您可能关注的文档

文档评论(0)

almm118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档