
_START_ARTICLE_
迭代
_START_PARAGRAPH_
迭代是重复反馈过程的活动，其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”，而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
_START_SECTION_
在数学中
_START_PARAGRAPH_
数学中的迭代可以指函数迭代的过程，即反复地运用同一函数计算，前一次迭代得到的结果被用于作为下一次迭代的输入。即使是看上去很简单的函数，在经过迭代之后也可能产生复杂的行为，派生出具有难度的问题。这样的例子可以参见考拉兹猜想和杂耍者序列（Juggler sequence）。又如一个简单的二次变换x→x(1-x)，它的迭代将形成一个具有混沌性质的动力系统。_NEWLINE_迭代在数学中的另一应用是迭代法，用来对特定数学问题作数值解估计。牛顿法就是迭代法的一个例子。
_START_SECTION_
在计算机中
_START_PARAGRAPH_
在计算机科学中，迭代是程序中对一组指令（或一定步骤）的重复。它既可以被用作通用的术语（与“重复”同义），也可以用来描述一种特定形式的具有可变状态的重复。_NEWLINE_在第一种意义下，递归是迭代的一个例子，但是通常使用一种递归式的表达。比如用0!=1，n!=n*(n-1)!来表示阶乘。而迭代通常不是这样写的。_NEWLINE_而在第二种（更严格的）意义下，迭代描述了在指令式编程语言中使用的编程风格。与之形成对比的是递归，它更偏向于声明式的风格。_NEWLINE_这里是一个依赖于破坏性赋值的迭代的例子，以指令式的伪代码写成：_NEWLINE_var i, a = 0         // 迭代前初始化for i from 1 to 3    // 重复3次_NEWLINE_{_NEWLINE_    a = a + i        // a的值增加i_NEWLINE_}_NEWLINE_print a              // 打印出数字6_NEWLINE_在这个程序片段中，变量i的值会不断改变，依次取值1、2和3。这种改变赋值——或者叫做可变状态——是迭代的特征。 这里是二分法解方程的递归和迭代算法的比较。_NEWLINE_递归：_NEWLINE__NEWLINE_确定开区间左边界和右边界，(L, R)_NEWLINE_若L + 1 >= R（即不包含整数点），表示序列中不存在f(x)_NEWLINE_取中位M = (L + R) / 2_NEWLINE_若f(M) == y，返回M_NEWLINE_否则根据f(M)和y的关系递归查找(L, M)或(M, R)_NEWLINE_迭代：_NEWLINE__NEWLINE_确定边界(L, R)_NEWLINE_while (L + 1 < R) /* 区间中包含整点*/_NEWLINE_求中位M = (L + R) / 2_NEWLINE_若f(M)等于y，退出循环_NEWLINE_根据f(M)与y的关系执行L = M 或 R = M，进入下一轮循环_NEWLINE_在函数编程语言中，迭代可以用递归技巧来。_NEWLINE_下述例子用Scheme语言写成。注意它是一个递归（迭代的特例），因为函数iter在解决问题时调用了自身。特别地，它使用了尾部递归，一种能被Scheme这样的编程语言完备支持的技巧，因此程序不会占用大量堆栈。_NEWLINE_;; sum : number -> number;; to sum the first n natural numbers(define(sum n)_NEWLINE_  (if (and (integer? n) (> n 0))_NEWLINE_     (let iter ([n n] [i 1])_NEWLINE_       (if (= n 1)_NEWLINE_            i_NEWLINE_            (iter (- n 1) (+ n i))))_NEWLINE_      ((assertion-violation_NEWLINE_       'sum "invalid argument" n))))_NEWLINE_迭代器（iterator）就是一个封装了迭代的对象。