问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

“递归”和“迭代”有什么区别?

发布网友 发布时间:2022-04-23 23:11

我来回答

5个回答

热心网友 时间:2022-06-17 20:44

“递归”和“迭代”的区别如下:

1、递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合。

2、迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B。

3、递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出。

热心网友 时间:2022-06-17 20:45

递归和迭代都是循环的一种。

简单地说,递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。

 

递归循环中,遇到满足终止条件的情况时逐层返回来结束。迭代则使用计数器结束循环。当然很多情况都是多种循环混合采用,这要根据具体需求。

 

递归的例子,比如给定一个整数数组,采用折半查询返回指定值在数组中的索引,假设数组已排序,为方便描述,假设元素都为正数,数组长度为2的整数倍。

折半查询是查询的一种,比遍历所有元素要快很多。

int Find(int *ary,int index,int len,int value)
{
    if(len==1)//最后一个元素
    {
        if (ary[index]==value)return index;//成功查询返回索引
        return -1;//失败,返回-1
    }
    //如果长度大于1,进行折半递归查询
    int half=len/2;
    //检查被查值是否大于上半部分最后一个值,如果是则递归查询后半部分
    if(value>ary[index+half-1])
        return Find(ary,index+half,half,value);
    //否则递归查询上半部分
    return Find(ary,index,half,value);
}

 

 

迭代经典例子就是实数的累加,比如计算1-100所有实数的和。

int v=1;
for(i=2;i<=100;i++)
{
    v=v+i;
}

热心网友 时间:2022-06-17 20:45

简单说来
迭代就是:每次函数调用的输出结果已经“在手头”,该结果作为下一次调用的输入。例如:
while(N) { s = fun(s);} // 等号左边的s已经暂存
而递归从形式上讲:在最后一次函数调用完成之间,期间任何一次调用的结果都是“未知的”。例如:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Tree{
vector<TreeNode*> m_root;
public:
void Traverse(TreeNode* root);

}

void Tree::Traverse(TreeNode* root){
if(!root) return;
m_root.push_back(root);
Traverse(root->left); //你尚且看不到root的全貌

Traverse(root->right); //你尚且看不到root的全貌
}

热心网友 时间:2022-06-17 20:46

递归:程序调用自身的编程技巧称为递归,是函数自己调用自己。
使用递归要注意的有两点:
1)递归就是在过程或函数里面调用自身;
2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口.
3)递归包含回溯和递推两个阶段。

迭代:利用变量的原值推算出变量的一个新值,如果递归是自己调用自己的话,迭代就是A不停的调用B。

递推:它是按照一定的规律来计算序列中的每个项,通常是通过计算机前面的一些项来得出序列中的指定象的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复。

递归与递推区别:递归的步骤中包含递推,如一个规模为n的问题,递归首先通过回溯将问题回溯到n-1,n-2……,然后再通过递推从1的结果一直递推到n。

递归与迭代的区别:递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出.

可以这么理解,递推和迭代都是正向的将一个复杂问题分解为小问题,一步一步得出结果;而递归是逆向的,多了一步回溯的过程。
如果有其他编程或测试的问题,可关注搜狗测试公众号或www.sogouqa.com。

热心网友 时间:2022-06-17 20:47

递归与迭代都是基于控制结构:迭代用重复结构,而递归用选择结构。
递归与迭代都涉及重复:迭代显式使用重复结构,而递归通过重复函数调用实现重复。
递归与迭代都涉及终止测试:迭代在循环条件失败时终止,递归在遇到基本情况时终止。
使用计数器控制重复的迭代和递归都逐渐到达终止点:迭代一直修改计数器,直到计数器值使循环条件失败;递归不断产生最初问题的简化副本,直到达到基本情况。迭代和递归过程都可以无限进行:如果循环条件测试永远不变成false,则迭代发生无限循环;如果递归永远无法回推到基本情况,则发生无穷递归。
递归函数是通过调用函数自身来完成任务,而且在每次调用自身时减少任务量。而迭代是循环的一种形式,这种循环不是由用户输入而控制,每次迭代步骤都必须将剩余的任务减少;也就是说,循环的每一步都必须执行一个有限的过程,并留下较少的步骤。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孔子周游列国坐的什么车? 高内聚 ,低耦合 到底是什么意思? 高内聚低耦合的设计原则 清爽百合虾仁 高内聚低耦合原则 4题求详细解答,高中数学题 ...JAVA项目中各自功能与优点,他们之间的联系是什么? ...是pl/sql写好了,但是不是我们写哦,我想问各位java程序猿们,你们写吗... 核桃分心木泡几次水合适 核桃分心木泡多少次水合适 灯为什么不是短路 生活中大家经常说的迭代是什么意思? 迭代的意思是什么? “迭代”是什么意思? 迭代是什么意思? 矿泉水可不可以反复烧开? 矿泉水可以烧开喝吗? 买来的矿泉水可以烧开喝? 矿泉水可以加热烧开吗 矿泉水能不能烧开喝? 瓶装矿泉水可以烧开喝吗 矿泉水到底能不能烧开喝 矿泉水可不可以烧开了喝 台式机的COMS电池型号都是CR2032的3V电池不? 电池型号CR2032哪有卖 主板上的纽扣电池是什么型号 CR2032 台式电脑主板电池型号是CR2032,家有一个空闲的CR2032L,不知道能不能替换上,来用? 请问在哪里能买到纽扣电池,型号为cr2032? 苏泊尔不粘锅涂层掉了还能用吗 刚买的苏泊尔炒锅煮了一次山楂后,涂层掉了,而且山楂有异味,请问东西还 ... 苏泊尔不粘锅涂层掉了 是不是会损害身体健康? 什么是迭代? 递归和迭代有什么区别? 在java中“迭代”是什么意思? 易姓女孩取名有内涵 易姓女孩起名 姓易的女孩起什么名字好 请大神帮起个名字 易姓 女孩 姓易,女孩取名共三个字,择优重赏 帮我起个好名字,姓易。是个女孩 易姓女孩取名 中间带个乔字 2017年3月29号好听的女孩名字易姓 姓易起什么名字好是女孩名字 金猪年出生的姓易的女孩起名 为什么淘宝组装都用至强处理器? 至强CPU能不能家用? 有些人为什么喜欢买至强cpu? 英特尔 Xeon(至强) 3.00GHz 核心数: 1 &#47; 线程数: 2.这个处理器是单核还是双核? e5哪款cpu单核性能高 英特尔至强单核性能怎么样? 电脑CPU玩游戏靠单核性能的吗 ? 怎样看CPU单核性能的?