迭代和递归的区别
参考链接:http://blog.csdn.net/swliao/article/details/5337896
递归
递归就是函数自己调用自己;
递归是一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似
且规模较小的问题来解决;
递归关注两点
1.递归就是在过程或函数里面调用自身;
2.在使用递归时,必须有一个明确的递归结束条件,称为递归接口;
递归分为两个阶段
1.递推:把复杂问题的求解等价为比原问题简单一些的问题的求解;
2.回归:当获得最简单的情况后,逐步返回,依次得到复杂的解;
例子:
斐波那契数列为:0,1,1,2,3,5...
fib(0)=0;
fib(1)=1;
fib(n)=fib(n-1)+fib(n-2);
递归代码:
这种方法的优点是简洁和容易理解,缺点是时间复杂度太大,随着n的增大,运算时间将会急剧增加。
因此在很多场合这种方法是不可取的。 使用这种方法的关键代码是:
int fib(int n)
{
if(n == 1|| n== 2)
{
return 1;
}
else
{
return fib(n - 1) + fib(n - 2);
}
}
迭代代码:
这种方法相对于递归法来说在时间复杂度上减小了不少,但代码相对就要复杂些了。它的思想是这样的,假设开始时f0=1,f1=1,
currentFib表示当前斐波那契数,则:
int fib(int n)
{
for(i = 1;i < n;i++)
{
currentFib = f0 + f1;
f0 = f1;
f1 = currentFib;
}
return currentFib;
}
这样迭代结束和currentFib就是fib(n)了。