递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.
一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合.
使用递归要注意的有两点:
1)递归就是在过程或函数里面调用自身;
2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口.
递归分为两个阶段:
1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;
2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.
利用递归可以解决很多问题:如背包问题,汉诺塔问题,...等.
斐波那契数列为:0,1,1,2,3,5...
fib(0)=0;
fib(1)=1;
fib(n)=fib(n-1)+fib(n-2);
[cpp] view plaincopyprint?
int fib(int n)
{
if(0 == n)
return 0;
if(1 == n)
return 1;
if(n > 1)
return fib(n-1)+fib(n-2);
}
上面就是一个简单的递归调用了.由于递归引起一系列的函数调用,并且有可能会有一系列的重复计算,递归算法的执行效率相对较低.
迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.
递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出.
[cpp] view plaincopyprint?
//这是递归
int funcA(int n)
{
if(n > 1)
return n+funcA(n-1);
else
return 1;
}
//这是迭代
int funcB(int n)
{
int i,s=0;
for(i=1;i<n;i++)
s+=i;
return s;
}
http://blog.csdn.net/swliao/article/details/5337896
相关推荐
DNS递归和迭代
使用动态规划方法实现0/1背包问题求解;一共两种解法:存储记忆+递归; 自下而上的递归(迭代法);我CSDN博客有详细介绍。
枚举算法,递归与分治策略,递归与迭代的思想、求最大值最小值、线性查找、二分查找与冒泡排序以及选择与交换排序、插入和希尔排序。本课程除了强调经典的算法理论和模型,亦兼顾编程实践能力。力图使得学员面对复杂...
递归与迭代算法及其在JAVA语言中的应用.pdf
递归和迭代1
DNS迭代查询和递归查询的区别.docx
Oracle使用递归查询。查询树结构的sql。在Oracle中,递归查询要用到start with ……connect by prior……
公司要求分享迭代和递归函数,在周末的时间整理了一个简单的PPT,在这里也分享给大家,互相学些,相互总结。
fibonacci数列的各种解法,递归、存储优化的递归、自下而上的递归(迭代法)、尾递归。其中分析内容请移步我的博客、
迭代与递归算法
二叉树遍历问题,从「前序」、「中序」、「后序」、「层序」四种遍历⽅式出发,总结他们的递归和迭代解法。同时包含代码的案例分析,内容比较详实,可供参考。
迭代与递归的区别
DNS转发器,根提示,递归,迭代的差别..
//二分查找,递归实现 int binarySearch(int a[],int low,int high,int key) { //查找某元素是否在数组中,若存在,则返回下标,否则返回-1; int mid=(low+high)/2; if(low>high){ return -1;//该元素不...
实验2 二分检索的递归与迭代算法设计(报告).doc
simple-sat, 在 python 中,编写了简单的递归和迭代SAT求解器 简单 SAT: 简单 python SAT求解器这个项目是一个简单的递归和迭代实现的回溯,基于观察的,SAT求解器。 代码基本上是基于knuth程序的,可以在这里找到 ...
NULL 博文链接:https://cxl2012.iteye.com/blog/2059218
} 上面就是一个简单的递归调用了.由于递归引起一系列的函数调用,并且有可能会有一系列的重复计算,递归算法的执行效率相对较低.迭代:利用变量的原值推算出变量的一
一起学DNS系列(十)图、例详解DNS递归和迭代查询原理及过程[汇编].pdf
Java程序设计中递归与迭代的比较