Fork me on GitHub

算法学习——迭代1

  迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

  谈到迭代,不得不说一下循环,因为迭代可以说成是循环的一种,

  凡是重复执行一段代码, 都可以称之为循环. 大部分的递归, 遍历, 迭代, 都是循环。

  这里也顺便说一下递归、迭代、遍历、循环的区别,

      循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,while语句。

       迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。

       遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。

     递归(recursion),指的是一个函数不断调用自身的行为。比如,以编程方式输出著名的汉诺塔问题。

其实这几种算法之间是可以转换的,任何用递归编写的函数都可以用循环代替,但用循环编写的函数并不都能用递归代替。另外,从理论上讲,所有的递归算法都能转化为迭代算法。【但这一观点无法证明】

之前用递归实现的阶乘以及Fibonacci数列等都可以用迭代实现,以下是部分代码:

//阶乘的迭代法实现
int func(int n)
{
    int result = 1;
    for(int k=1;k<=n;++k)
        result = result * k;//迭代
    return result;
} 
//迭代实现fibonacci
int Fibonacci(int n)
{
   if (n < 3)
      return 1;
  else
   {
           int first = 1;
           int second = 1;
           int temp = 0;
         for (int i=2; i<n; i++)
        {
             temp = first + second;
              first = second;
             second = temp;
           }
       return temp;
   }
}

一般来说,迭代的效率要高于递归,迭代法虽看似“笨”,但更容易想到。

posted @ 2016-03-02 17:36  Vicebery  阅读(319)  评论(0编辑  收藏  举报