递归和迭代区别

借用别人图说:


定义


优点


缺点


递归


程序调用自身的编程技巧称为递归


1)大问题化为小问题,可以极大的减少代码量;

2)用有限的语句来定义对象的无限集合.;

3)代码更简洁清晰,可读性更好


1)递归调用函数,浪费空间;

2)递归太深容易造成堆栈的溢出;


迭代


利用变量的原值推算出变量的一个新值,迭代就是A不停的调用B.


1)迭代效率高,运行时间只因循环次数增加而增加;

2)没什么额外开销,空间上也没有什么增加,


1)不容易理解;

2)代码不如递归简洁;

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);

}

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

int v=1;

for(i=2;i<=100;i++)

{

    v=v+i;

}

时间: 2024-10-12 08:05:27

递归和迭代区别的相关文章

深究递归和迭代的区别 联系 优缺点及实例对比

深究递归和迭代的区别.联系.优缺点及实例对比 1.概念区分 递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合. 使用递归要注意的有两点: 1)递归就是在过程或函数里面调用自身; 2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口. 递归分为两个阶段: 1)递推:把复杂的问题的求

【万字总结】探讨递归与迭代的区别与联系及如何求解10000的阶层

递归和迭代 这两个概念也许很多童鞋依旧分不清楚,下面通过求解斐波那契数来看看它们俩的关系吧. 斐波那契数的定义: f0=0 f1=1 fi=fi?1+fi?2(i>1) 递归: (factorial 6) (* 6 (factorial 5)) (* 6 (* 5 (factorial 4))) (* 6 (* 5 (* 4 (factorial 3)))) (* 6 (* 5 (* 4 (* 3 (factorial 2))))) (* 6 (* 5 (* 4 (* 3 (2 (factori

Java中递归和迭代的区别

关于递归和迭代的博客一篇: http://blog.csdn.net/believejava/article/details/8423888 递归占用的资源较多,而且容易发生内存溢出,不易管理,推荐使用迭代 包的好处是:将有相似功能java文件放在同一个包下,易于使用管理 防止命名冲突 为protected类型的变量提供保护,使其对包外不暴露,只能在包内使用. .有一个问题是为啥主函数所在的java文件不能写包名,只能import包,否则老是报错.. 还有就是我现在为啥都不需要在配置classp

递归与迭代

头文件 #include <stdlib.h> #include <stdio.h> #include <string.h> #pragma once 代码文件 #include "myH.h" //深度理解递归与迭代方法 //递归与迭代方法的区别: //递归使用函数和条件语句(if和else语句) //迭代法使用循环语句(for和while语句) /**************************************************

递归与迭代_1 2016.4.21

迭代乃人工,递归方神通 To interate is human,to recurse,divine 一.定义 (1) 迭代 是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果 每一次对过程的重复称为一次"迭代",而每一次迭代得到的结果会作为下一次迭代的初始值 (2) ① 程序调用自身的编程技巧称为递归( recursion) 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量

递归和迭代两种方式实现归并排序(Java版)

递归版 package MergeSort; import Utils.SortUtils; /** * 归并排序递归版 * @author liguodong */ public class Demo02 { public static void mergeSort(int[] a){ mSort(a, a, 0, a.length-1); } /** * * @param SR为待排序的数据 * @param TR1为排序之后的数据 * @param s * @param t */ publ

递归和迭代(Recursion and Iteration)

递归 特点:简而言之,递归就是应用程序调用自身.所以,存在预期收敛,才能使用递归(因为不能无限期递归调用下去). 优点:程序看着比较简单,比较容易实现. 缺点:递归要占用额外的栈空间,如果递归的深度比较大,那么占用的栈比较多,而且调用函数的时间也比较多,时空性都不好. 所以选择递归要考虑好处和缺点之间的权衡. 迭代 特点:通过步号寻找需要的信息,经典的例子比如C++中的for循环语句(迭代遍历程序). 优点:开销只因循环的增加而相应增加,没有额外的空间开销和时间开销. 缺点:编写复杂问题时可能程

递归与迭代【转】

1 递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合. 1.1 使用递归要注意的有两点: 1)递归就是在过程或函数里面调用自身: 2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口. 1.2 递归分为两个阶段: 1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解: 2

剑指offer (9) 递归和迭代 斐波那契数列

通常基于递归实现的代码比基于循环实现的代码要简洁很多 比如 二叉树遍历以及 二叉树的许多操作 递归由于是函数调用自身,每一次函数调用,都需要在内存栈中分配空间以保存参数.返回地址以及临时变量 而每个进程的栈容量是有限的,当递归调用的层级太多时,就会导致 调用栈溢出 递归有时伴随大量重复的计算, 二叉树遍历的递归操作不存在重复计算,因为每个结点的左右子树是严格区分开的 例如求解 斐波那契数列: 解题分析 int fib(int n) { assert(n >= 0); int prevTwo =