算法学习——迭代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; } }
一般来说,迭代的效率要高于递归,迭代法虽看似“笨”,但更容易想到。
学海无涯