迭代和递归的区别

参考链接: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)了。

posted @ 2013-12-08 18:14  独墅一枝花  阅读(866)  评论(0编辑  收藏  举报