- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
斐波那契数列递归和迭代循环链表队列初始化实验报告
第一次实验实验报告班级:2009211307 姓名:吕博文 学号工情况:个人一组完成日期:11月5日斐波那契数列递归和迭代算法一、问题描述分别写出下列函数的递归算法和迭代算法,并求出n=10时的函数值。Fib(n) = n 当n=0或n=1 Fib(n-2) + Fib(n-1) 当n=2二、算法思想用递归算法求解时,若输入的n的值为0或1,根据问题描述中Fib(n)的递归定义,算法直接返回n作为输出结果。当输入的n的值大于等于2时,根据Fib(n)的递归定义,算法将调用自身计算Fib(n-2)和Fib(n-1)的值,然后返回二者的和。用迭代算法求解时,先初始化Fib(0)和Fib(1)的值,用两个变量curValue和preValue存储,curValue存储较大的数值,preValue存储较小的数值。若输入的n的值为0或1,算法直接返回n。若输入的n的值大于等于2,循环n-1次,每次循环将curValue和preValue的值相加存入curValue中,并用preValue存储原来curValue的值,为下一次循环做好准备。最终的curValue的值即为Fib(n)的值。三、设计描述先提示输入n的值,然后调用递归算法计算Fib(n),输出,再调用迭代算法计算Fib(n),输出。递归算法int ShowFib_1(int n){ if (n == 0 || n == 1)//初始条件return n; else//不符合初始条件时,用递推关系计算return ShowFib_1(n-2) + ShowFib_1(n-1);}迭代算法int ShowFib_2(int n){preValue = 0; curValue = 1;//设定第一、第二项的值作为初始条件 if (n == 0 || n == 1)//第一、第二项可直接输出结果return n;else { for (i = 2; i = n; i++)//其余各项从前往后逐项相加 {temp = curValue;curValue = curValue + preValue;preValue = temp; }returncurValue; }}四、源程序#includeiostreamusing namespace std;int ShowFib_1(int n);//定义递归函数int ShowFib_2(int n);//定义迭代函数int main(){int n;cout N=?:;cin n; //递归算法cout 用递归算法计算 endl;cout ShowFib_1(n) endl; //迭代算法cout 用迭代算法计算 endl;cout ShowFib_2(n) endl;system(pause);return 0;}//递归算法int ShowFib_1(int n){ if (n == 0 || n == 1)//判定初始条件return n;else// return ShowFib_1(n-2) + ShowFib_1(n-1);}//迭代算法int ShowFib_2(int n){intpreValue = 0, curValue = 1;//设定第一、第二项的值if (n == 0 || n == 1)// return n;else { for (int i = 2; i = n; i++)//其余项从前往后逐项相加 {int temp;temp = curValue;curValue = curValue + preValue;preValue = temp; }returncurValue; }}五、测试结果N=40时利用递归求算时计算机反应速度较慢N=10时六、心得体会在N=40时,等待递归算法算出结果时间较长,可见递归算法计算斐波那契数列的效率不高。但使用迭代算法则想法,可见虽然迭代算法的思路稍难于递归算法,但时间复杂度与空间复杂度均优于递归算法。故更应推荐迭代算法。另外,本题难度低,过程中没什么问题,故无太多感想。第二题一、问题描述假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点而不设头指针,试编写相应的队列初始化、入队列、出队列和判断队列状态的算法。 利用上述算法完成下面的各操作,并在每一操作后输出队列状态。 1)下列元素逐一入队:5,7,3,8,55 状态:5个元素 2)3个元素出队 状态:2个元素 3)再2个元素出队 状态:队空 4)再1个元素出队 状态:队空(指示下溢)
文档评论(0)