有关递归算法与其转化为非递归算法探究.docVIP

有关递归算法与其转化为非递归算法探究.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
有关递归算法与其转化为非递归算法探究

有关递归算法与其转化为非递归算法探究   摘要递归算法是程序设计中一种重要的工具,基于长时间的实践,发现其存在着一定的优势与缺点。递归法与非递归法存在着一定的区别,同时递归算法不适合某些程序进行计算解决问题,本文重点对其非递归算法转化过程进行分析,以供参考。   【关键词】递归 非递归 算法 条件 实质 转化   1 引言   随着计算机信息技术的不断发展,软件行业与程序设计行业得到了前所未有的发展。越来越多的智能产品离不开先进计算机技术的支持。递归是程序设计中一种重要的解决办法,同时递归法也是一种计算机技术的发展思路,通过递归的方法实现庞大的工作量的简化,以提高工作效率,降低劳动强度,适合社会的高速发展。掌握好递归程序设计算法需要牢固的基础知识,同时经过长期的工作经验总结,才能运用自如。本文通过对递归法与转化而成的非递归算法进行研究,以供参考。   2 递归算法定义   随着程序设计者的意图不同,相互间可能会存在着一定的不协调性。利用递归的算法可以通过对自身程序进行调用,化解成多个小的问题,一一进行解决后对原问题进行解决的过程。对调用过程中的信息进行保存和恢复。递归算法的过程中相对简单,主要分为递推与回归两个部分,递推主要是为了得到问题的角,把问题推向更简单的方向,回归主要是指在简单的问题得到解答后,回归到原来的复杂问题中。在递归算法的实际应用过程中,递归算法所涉及到的参数与局部变量是有层次区分的。   3 递归算法的条件与优缺点   当在程序中需要解决的问题可以向另一个问题进行转化时,二者在解决办法相同,但处理的对象有所不同,这是递归算法应用时的一个基本条件,另外就是具备终止的递归条件,在转化的过程中,在特定条件已经得到解,无需再继续进行分解。递归设计的本质是当一个复杂的问题可以分解成几个子问题来进行处理时,这些子问题与原来的问题分析处理方法相同。当子问题解决时,原来的问题自然也就解决了,递归的定义归纳项就是对这种转化关系进行描述。   例 求n!(n为正整数) 。   一般的方法:   n! = 1*2*…*(n-1)*n      递归的方法:   int factorial(int n)   {int x;   if (n==0)   x=1;   else   x=factorial (n-1)*n;   return(x);   }   在案例中直接调用factorial(n-1)本身函数进行求解的办法进行,称为直接递归函数。   每一种算法都存在客观的优缺性,递归算法的优点是结构非常清晰,可读性强,而且容易使用数学归纳的方法来对算法的正确性进行证明,给调试程序带来了极大的便利,同时递归算法也有其缺点,它的运行效率偏低,在耗费的计算时间、存储空间都相对于非递归算法要多的多。   4 如何进行非递归算法转化   基于递归算法有优点和缺点,在运用时要对方法进行有效的选择,才能有效求解。经过长期的发展,人们更愿意采用递归的算法来对问题进行分析,而对于问题的求解则是多通过非递归算法来进行,这其中就需要将递归算法转化为非递归的算法。   转化过程就是分析的过程,把递归算法转换成非递归算法是对递归函数系统的执行过程的一种模拟,这种构造的非递归算法语句较多,但由于固定方法可以遵循,在实际的软件设计使用的频率较多。首先对栈S进行初始化,给每一个递归的函数入口分别进行不同的标号,每个返回处设立一个标号,把每个递归函数的递归调用进行如下操作转化。对现场进行保留,开辟存储空间,准备数据,转入相应的进归函数执行。 在特殊情况下也可以进行简化,简化规则主要有三种方式。如果在递归算法只有一处递归调用或多个调用返回时,所执行的语句都相同,则在转换时,返回地址可以不必入栈,只为参数设立栈进行保存。   递归算法转化为非递归算法主要有三种形式。首先是通过分析,不用分解,直接用循环的算法实现求解;二是自己运行时栈,对分析过程中的信息进行存储,转化为非递归算法替代递归算法;三是利用栈保存参数,由于栈本身具有典型的先进后出的性质,与递归算法的执行过程相匹配,因而可利用非递归算法来对递归算法进行替代。本文主要对直接转化与借助借助栈实现转化。   4.1 直接转化法   在递归算法的函数中,递归调用语名只有一个,这种递归称为尾递归,这个调用语句位于函数的最末端,当调用返回时,返回到上一层算法的结束处。用迭代形式来对其进行代替,不再使用系统运行时的栈来对信息进行保护。阶乘求解就可以写成如下所示的非递归算法。   LongUnfac(long n){//阶乘非递归算法   Long product=1;   For(int i=1; i=n;i++)   Product=product*i;

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档