迭代_迭代算法 - CSDN
迭代 订阅
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的。例如利用迭代法*求某一数学问题的解。对计算机特定程序中需要反复执行的子程序*(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。 展开全文
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的。例如利用迭代法*求某一数学问题的解。对计算机特定程序中需要反复执行的子程序*(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。
信息
领    域
数学、工程
适用范围
数学计算
特    点
重复反馈过程的活动
中文名
迭代
模    型
RUP
外文名
iteration
迭代相关概念
在数学中,迭代函数是在分形和动力系统中深入研究的对象。迭代函数是重复的与自身复合的函数,这个过程叫做迭代。迭代模型是RUP(Rational Unified Process,统一软件开发过程,统一软件过程)推荐的周期模型。 迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
收起全文
精华内容
参与话题
  • 递归和迭代

    万次阅读 多人点赞 2017-04-13 14:42:07
    一、对比 ... 其中,迭代与普通循环的区别是:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。  2、算法结束方式不同  递归循环中,

    一、对比

    相同点:

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

    不同点:

          1、程序结构不同

    • 递归是重复调用函数自身实现循环。
    • 迭代是函数内某段代码实现循环。

            其中,迭代与普通循环的区别是:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。

          2、算法结束方式不同

    •  递归循环中,遇到满足终止条件的情况时逐层返回来结束。
    • 迭代则使用计数器结束循环。

            当然很多情况都是多种循环混合采用,这要根据具体需求。

          3、效率不同

    • 在循环的次数较大的时候,迭代的效率明显高于递归。(参见二中实例3)


     二、实例

    1、递归:给定一个整数数组,采用折半查询返回指定值在数组中的索引,假设数组已排序,为方便描述,假设元素都为正数,数组长度为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);
    }
    2、迭代:实数累加,比如计算1-100所有实数的和。
    int v=1;
    for(i=2;i<=100;i++)
    {
        v=v+i;
    }
    3、综合应用(斐波那契数列分别用递归和迭代实现)

    问题:如果兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子,假设所有兔子都不死,那么一年后可以繁殖出多少对兔子?


    分析:前面相邻两项之和,构成了后一项。如图,


    数学定义:


    代码实现:

    #include "stdio.h"
    
    int Fbi(int i)  /* 斐波那契的递归函数 */
    {
    	if( i < 2 )
    		return i == 0 ? 0 : 1;  
        return Fbi(i - 1) + Fbi(i - 2);  /* 这里Fbi就是函数自己,等于在调用自己 */
    }  
    
    int main()
    {
    	int i;
    	int a[40];  
    	printf("迭代显示斐波那契数列:\n");
    	a[0]=0;
    	a[1]=1;
    	printf("%d ",a[0]);  
    	printf("%d ",a[1]);  
    	for(i = 2;i < 40;i++)  
    	{ 
    		a[i] = a[i-1] + a[i-2];  
    		printf("%d ",a[i]);  
    	} 
    	printf("\n");
    	
    	printf("递归显示斐波那契数列:\n");
    	for(i = 0;i < 40;i++)  
    		printf("%d ", Fbi(i));  
        return 0;
    }
    运行结果:



    运行过程显示,在循环的次数较大的时候,迭代的效率明显高于递归。上述例子中,笔者看到,迭代的结果全部打印完成耗时不到0.5s,而递归的结果前两排打印完耗时在1s内,最后一排的每个数据打印越来越慢,特别是最后一个数据,待到倒数第二个打印后,约3-4s才打印出来。究其原因,大量的递归调用会建立函数的副本,会耗费大量的时间和内存。而迭代则不需要反复调用函数和占用额外的内存


    转载请注明出处:

    http://blog.csdn.net/daijin888888/article/details/70157153





    展开全文
  • 究竟什么是迭代

    2019-12-04 21:00:23
    迭代,这个词我以前是没听过(学编程的童鞋可能很早就知道它),现在回想一下,我觉得这个词应该是在智能手机出现后,才被吃瓜群众广泛传播和应用的。 有一个词和“迭代”意思比较接近,叫“升级”,这个词我就很...

    最近读了一篇我觉得写的特别好的一篇文章,受益匪浅
    来源:简书
    作者:韩同志

    最近几年有一个词,频繁的出现,很多人都把它挂在嘴边,甚至它变的很时髦,这个词叫——

    迭代

    迭代,这个词我以前是没听过(学编程的童鞋可能很早就知道它),现在回想一下,我觉得这个词应该是在智能手机出现后,才被吃瓜群众广泛传播和应用的。

    有一个词和“迭代”意思比较接近,叫“升级”,这个词我就很熟悉,也非常好理解。比如,Windows每年都会升级一次,从95到XP再到现在的win7;应用软件每年都会出一个新版本,比如PS5.0到PScs,这是升级。

    相反,刚听到“迭代”这个词的时候,我大致好像能理解它的意思,但仔细想想,却又觉得很费解。

    为此我查过百度,而且查过很多遍,因为不理解,所以查完就忘,下次想起就又查,反反复复很多次,还是没搞明白。

    百度对“迭代”是这样定义的:

    迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。
    每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。

    本来还似懂非懂,看了这个定义后,我是彻底瞎。

    我真正开始理解“迭代”的含义,还真不是靠查出来的,也不是把这个概念背了下来,而是在生活中慢慢搞懂了。

    说一个我自己的故事。

    我是一个读书奇慢的人。记得上学那会儿,别人一天就可以看完一本很厚的武侠小说,而我吭哧吭哧可能一个月都看不完。我经常爱问别人一个问题:

    你读书,是一个字一个字看呢,还是一行一行的看呢?

    那个时候,我非常羡慕那些读书快的人。

    有一次我听说有位大神,一年可以读一百本书。我算了一下,照这个读法,一周至少要读2本,如果一本书按250面计算,那么每天应该读250×2÷7≈72面。

    我们都知道,做一个任务时,只要把这个任务进行分解,分解的越细,就越好执行,越容易达成目标。

    经过拆解,我发现100本书这个任务,难度好像不算特别大,也很有规律,于是我准备挑战下自己。

    我买来一堆书,然后给自己规划好,今天读多少页,明天读多少页,一周要达到多少,还专门买了个小本每天记录,然后呢?然后就没有然后了。

    表面看,这个计划完美无缺,有目标,有规划性,甚至每一天做什么,做多少,都那么一目了然,但是执行起来,发现却根本不是一回事儿。

    看似读100本书,是一个确定性的目标,其实它充满了无数的不确定性。

    我们假设读72面书需要1个小时,那你每天都能保证自己抽出这一个小时吗?

    假设你能保证每天抽1个小时,那你能保证你读完72面就都理解了吗?

    实际情况很可能是这样的:当你读一本书到第四章,忽然发现第一、二、三章之前压根就没读懂,于是又折返回去重新读。

    于是,你读第一、二、三章用的时间可能是你计划时间的2倍甚至更多。

    实在是坚持不下来啊,没办法,我放弃了读100本书的目标,把注意力从数量上开始转移到质量上。

    大概坚持读了两年之后,我读书的速度不知不觉的比以前快了很多,虽然一年还是读不了100本书,但是读个30几本书还是可以做到的。

    现在回想一下,如果把我一年读完的这30本书,按之前那种规划,把30本书平均分配到一年的365天去读,我是无论如何也做不到的。

    但有一件事我做到了,就是每天都抽出时间读书,也许是一个小时,也许是半个小时,也许是一刻钟。

    因为每天都读,于是读的东西越来越多,所以当看到某本书有相同或者类似的内容,我就直接扫读了。

    因为每天都读,于是对某个领域知道的就更深入,所以当看到某本书里比较浅显的部分,我就直接跳读了。

    因为每天都读,于是理解能力增强了,所以以前可能读完后,需要再花10分钟去理解的,现在只需要5分钟,所以我读书的速度变快了。

    有趣的是,当我做到了每年30本书,再来看每年100本书这个目标,觉得没有当初那么难了,是可以实现的,并且对如何实现也有了一个比较靠谱的认知,大概知道该怎么推进。

    所以,当初设定每年100本书这个目标,并没有错,起码它给了你行动之前的一个设想,在你前行的路上插了一杆旗。

    我们不可能在毫无规划、毫无设想的情况下就起步,只不过这样的设想、这样的规划,它只是一个起点。

    当你有了这个起点,然后放在一个真实的场景中,去做一件事的时候,你会发现,通过纯粹的规划,是解决不了问题的,但也不能毫无方向,想到哪做到哪,像无头苍蝇一样去实现目标。

    这个过程很像打游戏,你刚开始玩,一下子就输了,但是随着你玩的次数越来越多,你的技艺就越来越精湛,而这个结果,不是你在开始玩游戏的时候,规划出来的,而是在你玩的过程中,通过不断的输不断的输,练出来的。

    所以,你能达成的结果,都是在你做的过程中,不断试错,不断调整,不断精进,最后自然而然得到的一个结果。

    所以,我们不能把迭代简单的理解为“升级”。

    升级,更多描述的是一个结果,是一种直接的,一次性的,达成的一个目标,是一种线性的进程。

    而迭代,是通过无数次,不断的,重复的,接近一个目标,折返接近,再折返再接近,最终达到目标。它不是一次性完成的,是通过不断重复的,但每次重复又比之前更好一点,这样一种非线性的进程。

    为什么我的目标原来是100本书,现在只做到了30本书,连一半都没达到,我却认为自己对达成100本书这个目标,反而更清晰了呢?

    这是因为在不断的迭代过程中,我的认知升级了,于是我对达到目标的规划更清晰了,尽管这个清晰度,也会随着迭代的过程再次变得不同。

    现在我们把“迭代”的关键词拆解一下:

    1.重复

    不断的重复做,而不是一次性的完成。

    2.改进

    在做的过程中不断的改进、调整、优化。

    3.认知升级

    迭代的过程就是不断提高认知的过程,升级只是这个过程的一个结果。

    展开全文
  • 什么是迭代

    万次阅读 2019-02-28 22:47:01
    迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。 重复执行一系列运算步骤,从前面的量依次求出后面的量...

    迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
    重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的。例如利用迭代法求某一数学问题的解。
    对计算机特定程序中需要反复执行的子程序
    (一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。

    有一篇文章详细的描述了“迭代”一词的理解方式https://www.jianshu.com/p/1a0b810e0a8b

    展开全文
  • 迭代是人,递归是神(迭代与递归的总结:比较)

    万次阅读 多人点赞 2018-04-16 22:15:26
    https://blog.csdn.net/LG1259156776/article/details/46849809在计算机编程实现中有常常两种方法:一曰迭代(iterate);...从“编程之美”的角度看,可以借用一句非常经典的话:“迭代是人,递归是神!...

    在计算机编程实现中有常常两种方法:一曰迭代(iterate);二曰递归(recursion)。


    从“编程之美”的角度看,可以借用一句非常经典的话:“迭代是人,递归是神!”来从宏观上对二者进行把握。


    从概念上讲,递归就是指程序调用自身的编程思想,即一个函数调用本身;迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想。


    从直观上讲,递归是将大问题化为相同结构的小问题,从待求解的问题出发,一直分解到已经已知答案的最小问题为止,然后再逐级返回,从而得到大问题的解(一个非常形象的例子就是分类回归树 classification and regression tree,从root出发,先将root分解为另一个(root,sub-tree),就这样一直分解,直到遇到leafs后逐层返回);而迭代则是从已知值出发,通过递推式,不断更新变量新值,一直到能够解决要求的问题为止。


    以斐波那契数列的求解为例,通过两种典型的实现进行对比:


    fib(0)=0;

    fib(1)=1;

    fib(n)=fib(n-1)+fib(n-2);


    递归的实现

    [objc] view plain copy
    1. int fib(int n){  
    2.      if(n>1return fib(n-1) + fib(n-2);  
    3.      else return n; // n = 0, 1时给出recursion终止条件  
    4. }  


    迭代的实现

    [objc] view plain copy
    1. int fib(int n){  
    2.     int i, temp0, temp1, temp2;        
    3.     if(n<=1return n;  
    4.     temp1 = 0;  
    5.     temp2 = 1;  
    6.     for(i = 2; i <= n; i++){  
    7.         temp0 = temp1 + temp2;  
    8.         temp2 = temp1;  
    9.         temp1 = temp0;  
    10.     }  
    11.     return temp0;  
    12. }  


    下面就对递归和迭代进行比较:


    递归实际上不断地深层调用函数,直到函数有返回才会逐层的返回,因此,递归涉及到运行时的堆栈开销(参数必须压入堆栈保存,直到该层函数调用返回为止),所以有可能导致堆栈溢出的错误;但是递归编程所体现的思想正是人们追求简洁、将问题交给计算机,以及将大问题分解为相同小问题从而解决大问题的动机。


    迭代大部分时候需要人为的对问题进行剖析,将问题转变为一次次的迭代来逼近答案。迭代不像递归一样对堆栈有一定的要求,另外一旦问题剖析完毕,就可以很容易的通过循环加以实现。迭代的效率高,但却不太容易理解,当遇到数据结构的设计时,比如图‘表、二叉树、网格等问题时,使用就比较困难,而是用递归就能省掉人工思考解法的过程,只需要不断的将问题分解直到返回就可以了。


    总之,递归算法从思想上更加贴近人们处理问题的思路,而且所处的思想层级算是高层(神),而迭代则更加偏向于底层(人),所以从执行效率上来讲,底层(迭代)往往比高层(递归)来的高,但高层(递归)却能提供更加抽象的服务,更加的简洁。


    从个人来讲,我非常认同“迭代是人,递归是神”!


    **********************************随时发现,随时分享*********************************


    展开全文
  • 迭代算法的经典案例

    千次阅读 2015-06-19 10:12:51
    Fibonacci数列:第3个数等于前面2个数字之和 汉诺塔:从小到大叠加的同心圆,从一根柱子移动到另一根柱子
  • 迭代

    2019-08-15 15:44:23
    for c in s: # 字符串是一个可迭代对象 print(c) for c in "哼哼哈哈": print(c) for i in 123: # 'int' object is not iterable print(i) dir() 可以帮我们查看xxx数据能够执行的操作...
  • 你真的知道敏捷和迭代吗?

    万次阅读 2017-07-11 09:06:22
    在这敏捷开发横行的时代中,人人都在谈敏捷,人人都在谈迭代,似乎大家好像都尝到了敏捷带来的甜头,记得有一次跟朋友吃饭,说他们现在的项目用敏捷开发,每个迭代都能看到不断完善的产品,非常有成就感,客户的满意...
  • 迭代算法与递归算法的概念及区别

    千次阅读 2019-04-30 14:19:20
    迭代算法是用计算机处理问题的一种基本方法。它利用计算机运算速度快、适合做重复性操做的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。...
  • 迭代和递归的理解和区别

    万次阅读 多人点赞 2019-05-08 13:44:59
    最近做一些题经常会碰到迭代的方法解的,或者递归解法,容易搞混,特在此整理一下 一.递归: 由例子引出,先看看递归的经典案例都有哪些 1.斐波那契数列 斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1...
  • 迭代的含义及操作

    千次阅读 2016-06-23 17:02:24
    迭代的基本含义:基本:迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。 计算机:在...
  • 迭代(一):迭代算法的基本思想

    千次阅读 2019-07-27 10:41:50
    迭代法也称辗转法,是一种不断用变量的旧值推出新值的过程。它是解决问题的一种基本方法,通过让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值...
  • 雅克比(Jacobi)迭代法求解线性方程组

    万次阅读 多人点赞 2018-07-08 15:47:44
    长博文不利于翻阅,于是又将Jacobi迭代法单独出来了。这篇博文把高斯—赛德尔迭代法和雅克比迭代法都放到一起了,个人觉得看着有点累。(迭代法求解线性方程组),不过还是要看的,因为它引出了迭代法。进入主题:...
  • 迭代算法

    万次阅读 2018-08-24 18:39:09
    迭代法也称辗转法,迭代是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题的过程,为实现 这一过程所使用的方法称为迭代法。常见的迭代法是牛顿迭代法,其他还包括最速下降法、共轭迭代法、最小 ...
  • 1、迭代iteration 给定一个list或者tuple,通过for循环来遍历这个list或者tuple、这种遍历就是迭代(iteration)。只要是可迭代的对象都可以进行迭代。 2、例子:字典的迭代 &gt;&gt;&gt; d={'...
  • 在Matlab中,可以通过while语句来进行迭代控制,我总结了两种写法,各有特色,现一一列出。首先给出一个场景:通过迭代不断地产生随机数a,b,c,当a+b+c>10或迭代进行到第5次后停止迭代。1.loop=1; while d a=rand; ...
  • 一文读懂Python可迭代对象、迭代器和生成器

    万次阅读 多人点赞 2018-05-08 22:30:33
    我们都知道,序列可以迭代。但是,你知道为什么吗? 本文来探讨一下迭代背后的原理。序列可以迭代的原因:iter 函数。解释器需要迭代对象 x 时,会自动调用 iter(x)。内置的 iter 函数有以下作用:(1) 检查对象是否...
  • DNS递归查询和迭代查询的区别

    万次阅读 多人点赞 2011-08-26 10:02:48
    递归查询和迭代查询的区别 (1)递归查询 递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该...
  • C++ map的迭代器遍历

    万次阅读 2018-12-14 16:24:11
    map&lt;string,int&gt; m; map&lt;string,int&gt;::iterator it; it = m.begin(); while(it != m.end()) { it-&gt;first; it-&gt;second; it ++; }
  • 策略迭代与值迭代的区别

    万次阅读 多人点赞 2017-08-31 21:12:32
    策略迭代与值迭代都属于强化学习里面策略求解中的动态规划方法。其区别是什么呢? 首先看一张图片: 首先看策略迭代: 1.initialization 初始化所有状态的v(s)以及π(s)(初始化为随机策略) 2....
  • 数值分析 jacobi迭代法MATLAB程序实现 函数内容(保存为jacobi.m文件,在MATLAB中运行): %function [G,d,x,N]=jacobi(A,b) %Jacobi迭代法求解线性方程组。迭代公式x(k+1)=-Gx(k)+d,(k=0,1,…). %返回迭代矩阵G...
1 2 3 4 5 ... 20
收藏数 990,070
精华内容 396,028
关键字:

迭代