递归改循环

递归需要保存现场,所以会导致栈不断加深。因此如果改循环,那么也需要创建栈来保存现场。

书写递归函数时,递归函数的退出是由于不满足递归条件而导致的,但从结果上来看即是现场的退出。因此改为循环时,循环条件可以是现场数量是否为0,即栈元素是否为零。

进入一次递归函数可以看成是入栈,退出一次递归函数则是出栈。

可以根据形参的数量创建相应数量的栈,各个栈用于保存相应的形参。如果形参中包含这样的参数——该参数代表的内存贯穿整个递归——那么该参数可以不放入栈元素中。

递归函数体即为循环体。

时间: 2024-10-17 06:32:04

递归改循环的相关文章

一道思维题 &&递归改循环

思路: 比如5 2 12345--> 1245 从3开始,这时候5变成了1.剩下4512,对应1234.只需要找到现在n-1,k中的数对应原来的编号的映射.比如1-->3 是1+2 mod 5,4-->1是4+2 mod 5. 这就形成了递归. 这样递归到最后剩一个数,结果就是这个数. 这样的问题是mod n后从0开始, 解决办法1:返回时+1 #include <iostream> using namespace std; int A(int n, int k) { if

迭代、递归替代循环

循环(迭代)与递归的区别 1. 递归算法与迭代算法的设计思路区别在于:函数或算法是否具备收敛性,当且仅当一个算法存在预期的收敛效果时,采用递归算法才是可行的,否则,就不能使用递归算法. 当然,从理论上说,所有的递归函数都可以转换为迭代函数,反之亦然,然而代价通常都是比较高的. 但从算法结构来说,递归声明的结构并不总能够转换为迭代结构,原因在于结构的引申本身属于递归的概念,用迭代的方法在设计初期根本无法实现,这就像动多态的东西并不总是可以用静多态的方法实现一样.这也是为什么在结构设计时,通常采用递

递归与循环

如果我们需要重复多次计算相同的问题,通常可以选择递归或者循环 递归的好处是代码简洁 但是递归也有明显的缺点: 递归是由于函数调用自身,而函数调用是需要有时间和空间的消耗的.每一函数调用,都需要在内存栈中分配空间以保存参数,返回地址和临时变量,而且往栈中压入数据和弹出数据都需要时间. 递归中有可能很多计算都是重复的.递归的本质是把一个大问题分解成小问题,但是多个小问题之间会有重叠的部分 递归可能会引发问题:调用栈溢出. 斐波拉契数列 public class Exam9_Fibonacci { p

关于递归和循环

一. 递归的慢究竟慢在哪 递归就是函数自己调用自己,函数每次调用的时候需要将以下内容存入递归栈:调用函数地址.形参.局部变量.返回值.所以如果递归调用了N次,那压栈操作要保存N * 调用函数地址.N * 局部变量.N * 形参.N * 返回值.这势必是影响效率的. 二. 递归和循环的比较: 递归和循环是两种不同的解决问题的思路,我们不能片面的说循环的效率一定会比递归高,下面我们做简单的分析: 1. 递归: 优点:代码简洁,清晰 缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额

黑马程序员----java基础---递归概述、递归和循环的区别

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.递归函数,通俗的说就是函数本身自己调用自己... 如:n!=n(n-1)! 你定义函数f(n)=nf(n-1) 而f(n-1)又是这个定义的函数..这就是递归 定义:程序调用自身的编程技巧称为递归( recursion). 递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小

15.输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4260432.html  声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换. 题目分析:

递归与循环的区别

递归与循环是两种不同的解决问题的典型思路. 递归算法: 优点:代码简洁.清晰,并且容易验证正确性.(如果你真的理解了算法的话,否则你更晕) 缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,比如参数传递需要压栈等操作,会对执行效率有一定影响.但是,对于某些问题,如果不使用递归,那将是极端难看的代码. 循环算法: 优点:速度快,结构简单. 缺点:并不能解决所有的问题.有的问题适合使用递归而不是循环.如果使用循环并不困难的话,最好使用循环. 递归算法 和循环算法总结

反转一个链表的两种方法:递归和循环

下面是反转一个链表的两种方法: 一.循环算法 //反转一个链表,循环算法 LinkList Reverse(LinkList& head) { // if(!head) // return head; //此时不用判断head是否为空,如是空的话返回的也是空 LinkList cur = head; LinkList hou; LinkList beh = 0; while (cur) { hou = cur->next; cur->next = beh; beh = cur; cur

数据结构与算法 —— 递归的效率问题以及递归与循环的比较

1.所谓的递归慢到底是什么原因呢? 大家都知道递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的.具体是每次调用函数本身要保存的内容包括:局部变量.形参.调用函数地址.返回值.那么,如果递归调用N次,就要分配N*局部变量.N*形参.N*调用函数地址.N*返回值.从而导致了效率的低下. 2.用循环效率会比递归效率高吗? 递归与循环是两种不同的解决问题的典型思路.当然也并不是说循环效率就一定比递归高,递归和循环是两码事,递归带有栈操作,循环