简单来说,递归就是自己调用自己,如:int abc(){if() //递归终止条件{ return abc(); }return 0;}而递归是重复一组指令,不断地根据变量的旧值推出新值,如:for(; ; ;) //迭代终止条件{a = b + c;b = a;c = a;}
对,更精炼,比如说
求一个函数
f(n) = f(n-1) + 1; f(1) = 1;
写递归就和这个函数的定义差不多,非常简洁明了
int f(int n)
{
if (n==1)
return 1;
else return f(n-1);
}
<可以自由转载,但请注明以下内容,谢谢合作!>
<作者:Enoch Wang 引用自:>
是的,通过PUSH压栈和PULL出栈就可以例子很多,而且在底层的话也就是通过压栈和出栈来实现递归算法的。
有些算法用递归要想转换成迭代还是比较复杂的,就比如典型的汉诺塔问题,尽管网上流传说已有人使用迭代解决了,但它的正确性是否得到了研究界人士的肯定这点尚未到得证实。目前普遍还是采用递归来实现它。
扩展资料:
跟迭代法相对应的是直接法(或者称为一次解法),即一次性的快速解决问题,例如通过开方解决方程x +3= 4。一般如果可能,直接解法总是优先考虑的。但当遇到复杂问题时,特别是在未知量很多,方程为非线性时,无法找到直接解法(例如五次以及更高次的代数方程没有解析解,参见阿贝耳定理),这时候或许可以通过迭代法寻求方程(组)的近似解。
参考资料来源:百度百科-迭代法
我举个例子:
①斐波那契数列:1,1,2,3,5,8,13,21,34
迭代:int Fib[N];
Fib[0]=1;Fib[1]=1;
for(i=2;i<N;i++)
Fib[i]=Fib[i-1]+Fib[i-2];
}
递归:int Fib(int n)
{ if(n==0||n==1)return 1;
else return (Fib(n-1)+Fib(n-2));
}
递归与迭代都是基于控制结构:迭代用重复结构,而递归用选择结构。递归与迭代都涉及重复:迭代显式使用重复结构,而递归通过重复函数调用实现重复。递归与迭代都涉及终止测试:迭代在循环条件失败时终止,递归在遇到基本情况时终止。使用计数器控制重复的迭代和递归都逐渐到达终止点:
迭代一直修改计数器,直到计数器值使循环条件失败;递归不断产生最初问题的简化副本,直到达到基本情况。迭代和递归过程都可以无限进行:如果循环条件测试永远不变成false,则迭代发生无限循环;如果递归永远无法回推到基本情况,则发生无穷递归。递归函数是通过调用函数自身来完成任务,而且在每次调用自身时减少任务量。而迭代是循环的一种形式,这种循环不是由用户输入而控制,每次迭代步骤都必须将剩余的任务减少;也就是说,循环的每一步都必须执行一个有限的过程,并留下较少的步骤。
1递归2递归
以上就是关于递归 迭代 循环 三者有何联系和区别全部的内容,包括:递归 迭代 循环 三者有何联系和区别、递归算法的程序结构比迭代算法的程序结构更为精炼,这个正确吗,能不能解释下、递归、递推、迭代分别是什么意思,有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)