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