zoukankan      html  css  js  c++  java
  • 迭代和递归的区别

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

  • 相关阅读:
    java中商业数据计算时用到的类BigDecimal和DecimalFormat
    Git和SVN之间的区别
    ubuntu 交叉编译arm linux 内核小例子
    交叉编译工具链介绍《Building Embedded Linux Systems》
    交叉编译工具链命名详解
    oracle数据库分页总结
    oracle随机数(转)
    oracle函数nvl, nvl2, nullif
    反转数字, 即输入123, 返回321
    java试题
  • 原文地址:https://www.cnblogs.com/wufengv5/p/3464058.html
Copyright © 2011-2022 走看看