迭代

迭代(),亦作-{zh-hans:疊;zh-hant:迭}-代,是重复反馈过程的活动,其目的通常是为了接近並且到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。

在数学中
的迭代。将对角用直线段连起来得到一个五角星,后者中心围成了一个倒过来的小五边形。迭代地执行这一过程会产生一系列嵌套的五边形和五角星。]]

数学中的迭代可以指函数迭代的过程,即反复地运用同一函数计算,前一次迭代得到的结果被用于作为下一次迭代的输入。即使是看上去很简单的函数,在经过迭代之后也可能产生复杂的行为,衍生出具有难度的问题。这样的例子可以参见考拉兹猜想和。又如一个简单的二次变换x \to x(1-x),它的迭代将形成一个具有混沌性质的动力系统。

迭代在数学中的另一应用是迭代法,用来对特定数学问题作数值解估计。牛顿法就是迭代法的一个例子。

在電腦中
在计算机科学中,迭代是程序中对一组指令(或一定步骤)的重复。它既可以被用作通用的术语(与“重复”同义),也可以用来描述一种特定形式的具有可变状态的重复。

在第一种意义下,递归是迭代的一个例子,但是通常使用一种递归式的表达。比如用0!=1,n!=n(n-1)!来表示阶乘。而迭代*通常不是这样写的。

而在第二种(更严格的)意义下,迭代描述了在指令式编程语言中使用的编程风格。与之形成对比的是递归,它更偏向于声明式的风格。

这里是一个依赖于破坏性赋值的迭代的例子,以指令式的虛擬碼写成:

-{}-
var i, a = 0 // 迭代前初始化
for i from 1 to 3 // 重复3次
{
a = a + i // a的值增加i
}
print a // 打印出数字6

在这个程序片段中,变量i的值会不断改变,依次取值1、2和3。这种改变赋值——或者叫做可变状态——是迭代的特征。
这里是二分法解方程的递归和迭代算法的比较。

递归:
-{}-
确定开区间左边界和右边界,(L, R)
若L + 1 >= R(即不包含整数点),表示序列中不存在f(x)
取中位 M = (L + R) / 2
若f(M) == y,返回M
否则根据f(M)和y的关系递归查找(L, M)或(M, R)

迭代:
-{}-
确定边界(L, R)
while (L + 1
;; sum : number -> number
;; to sum the first n natural numbers
(define(sum n)
(if (and (integer? n) (> n 0))
(let iter ([n n] [i 1])
(if (= n 1)
i
(iter (- n 1) (+ n i))))
((assertion-violation
'sum "invalid argument" n))))

迭代器(iterator)就是一个封装了迭代的对象。

参见
*迭代法
*迭代函数
*For循环
*While循环
*递归

评论 (0)

  • 还没有评论,来抢沙发吧。