您好,欢迎来到[问答大全]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 问答大全 >> 电脑网络 >> 递归算法和非递归算法看了一些算法的递归版本和非递归版本,非递归算

递归算法和非递归算法看了一些算法的递归版本和非递归版本,非递归算

来源:网络整理     时间:2016/4/27 4:21:31     关键词:

关于网友提出的“递归算法和非递归算法看了一些算法的递归版本和非递归版本,非递归算”问题疑问,本网通过在网上对“递归算法和非递归算法看了一些算法的递归版本和非递归版本,非递归算”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:递归算法和非递归算法看了一些算法的递归版本和非递归版本,非递归算

解决方案1:

1. 如果非递归是用栈来实现:一位csdn网友的评论如下说便是我亲身的经历:1、递归和非递归(用栈)非递归(用栈),也用到栈函数了,和递归就没多大区别了!每次递归进栈出栈,非递归(用栈)的每次调用栈函数也是进栈出栈。主要是在非递归(用栈)中,它的栈函数里比递归多了些赋值语句。。。所以效率上,非递归(用栈)比递归差。只不过,递归越深,占用栈空间越多。非递归(用栈),占用的栈空间少。如果,递归的深度还没达到超出栈空间的程度,那么递归比非递归(用栈)好。如果是非递归(不用栈),当然是非递归最好。在下面的这个例子(解决“整数划分问题”)中,说明了如果只是用栈机械的模拟,得到的结果只是: 空间不变(事实上,非递归应该多一些),而非递归的时间数倍的增加。。 感兴趣的朋友运行就知道了#include#include#includeusing namespace std;//---------------------------递归算法int q(int n,int m){if((n<1) || (m<0)) return 0;if((n==1) ||( ...

1. 如果非递归是用栈来实现:一位csdn网友的评论如下说便是我亲身的经历:1、递归和非递归(用栈)非递归(用栈),也用到栈函数了,和递归就没多大区别了!每次递归进栈出栈,非递归(用栈)的每次调用栈函数也是进栈出栈。主要是在非递归(用栈)中,它的栈函数里比递归多了些赋值语句。。。所以效率上,非递归(用栈)比递归差。只不过,递归越深,占用栈空间越多。非递归(用栈),占用的栈空间少。如果,递归的深度还没达到超出栈空间的程度,那么递归比非递归(用栈)好。如果是非递归(不用栈),当然是非递归最好。在下面的这个例子(解决“整数划分问题”)中,说明了如果只是用栈机械的模拟,得到的结果只是: 空间不变(事实上,非递归应该多一些),而非递归的时间数倍的增加。。 感兴趣的朋友运行就知道了#include#include#includeusing namespace std;//---------------------------递归算法int q(int n,int m){if((n<1) || (m<0)) return 0;if((n==1) ||(m==1)) return 1;if(n s;s.push (tmp);while(!s.empty()){   tmp= p();   n=tmp.n; m=tmp.m;   s.pop();   if((n<1) || (m<0))   ++sum;    else if((n==1) ||(m==1)) ++sum;   else if(n>num;   p=clock();   cout<<" 递归: "<<><><><>
展开

其他答案

(共 1 个回答)

  • 非递归算法往往在空间消耗上比同等效果的递归算法少很多。如果是迭代,是常数级的内存开销。不一定要在栈上分配大量存储空间。lisp语言这这一点有精辟的论述,scheme作为lisp的一种方言,甚至用尾递归取代了循环结构。
    										

    解决方案2:

    非递归算法往往在空间消耗上比同等效果的递归算法少很多。如果是迭代,是常数级的内存开销。不一定要在栈上分配大量存储空间。lisp语言这这一点有精辟的论述,scheme作为lisp的一种方言,甚至用尾递归取代了循环结构。


    以上介绍了“递归算法和非递归算法看了一些算法的递归版本和非递归版本,非递归算”的问题解答,希望对有需要的网友有所帮助。
    本文网址链接:http://www.codes51.com/wd/849407.html

相关图片

相关文章