删除的内容 添加的内容
→‎在数学中:​ 維基化
「疊代」或「迭代」已經被討論很多次了,Google即可搜尋到不少。「疊」帶有累進之意,「迭」則有交替之意(但在中國大陸亦可通「疊」),故「疊代」才更能契合英語iteration的字根,即拉丁文iterum(再一次)。鑑於中國大陸習稱「迭代」,在此僅更動正體頁面而保留簡體頁面的「迭代」。
 
(未显示17个用户的19个中间版本)
第1行:
{{NoteTA|1=zh-hans:迭代;zh-hant:疊代|G1 = IT}}
'''迭代'''是重复[[反馈]]过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
 
'''迭代'''({{lang-en|iteration}}),一作'''-{zh-hans:疊;zh-hant:迭}-代''',是重复[[反馈]]过程的活动,其目的通常是为了接近並且到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
 
==在数学中==
[[Image:Pentagon iteration.svg|thumb|leftright|200px|一个[[五边形]]的迭代。将对角用直线段连起来得到一个[[五角星]],后者中心围成了一个倒过来的小五边形。迭代地执行这一过程会产生一系列嵌套的五边形和五角星。]]
 
数学中的'''迭代'''可以指[[迭代函数|函数迭代]]的过程,即反复地运用同一[[函数]]计算,前一次迭代得到的结果被用于作为下一次迭代的输入。即使是看上去很简单的函数,在经过迭代之后也可能产生复杂的行为,衍生出具有难度的问题。这样的例子可以参见[[考拉兹猜想]]和[[杂耍者序列]](Juggler sequence)。又如一个简单的二次变换x→x(1-x),它的迭代将形成一个具有[[混沌]]性质的[[动力系统]]。
第8行 ⟶ 第10行:
迭代在数学中的另一应用是[[迭代法]],用来对特定数学问题作数值解估计。[[牛顿法]]就是迭代法的一个例子。
 
==在计算机電腦中==
{{See also|迭代式开发}}
在计算机科学中,'''迭代'''是[[计算机程序|程序]]中对一组指令(或一定步骤)的重复。它既可以被用作通用的术语(与“重复”同义),也可以用来描述一种特定形式的具有[[不可变对象|可变]]状态的重复。
 
在第一种意义下,[[递归]]是''迭代''的一个例子,但是通常使用一种''递归式的表达''。比如用0!=1,n!=n*(n-1)!来表示[[阶乘]]。而''迭代''通常不是这样写的。
第18行 ⟶ 第20行:
这里是一个依赖于[[赋值 (计算机)|破坏性赋值]]的迭代的例子,以[[指令式编程|指令式]]的[[虛擬碼]]写成:
 
-{}-
'''var''' i, a = 0 ''// 迭代前初始化''
'''forvar''' i, a = 0 '''from''' 1 '''to''' 3 ''// 循环3次''迭代前初始化
'''for''' i '''from''' 1 '''to''' 3 // 重复3次
{
{
a = a + i '' // a的值增加i''
}
}
print a ''// 打印出数字6''
 
在这个程序片段中,变量i的值会不断改变,依次取值1、2和3。这种改变赋值——或者叫做''可变状态''——是迭代的特征。
这里是二分法解方程的递归和迭代算法的比较。
 
递归:
-{}-
<source lang="scheme">
确定开区间左边界和右边界,(L, R)
若L + 1 >= R(即不包含整数点),表示序列中不存在f(x)
取中位 M = (L + R) / 2
若f(M) == y,返回M
否则根据f(M)和y的关系递归查找(L, M)或(M, R)
 
</source>
迭代:
-{}-
<source lang="scheme">
确定边界(L, R)
while (L + 1 < R) /* 区间中包含整点 */
求中位M = (L + R) / 2
若f(M)等于y,退出循环
根据f(M)与y的关系执行 L = M 或 R = M,进入下一轮循环
 
</source>
在[[函数编程语言]]中,迭代可以用递归技巧来。
 
在[[函数编程语言]]中,迭代可以用递归技巧来 下述例子用[[Scheme|Scheme语言]]写成。注意它是一个递归(迭代的特例),因为函数iter在解决问题时调用了自身。特别地,它使用了[[尾部递归]],一种能被Scheme这样的编程语言完备支持的技巧,因此程序不会占用大量[[堆栈]]。
<sourcesyntaxhighlight lang="scheme">
;; sum : number -> number
;; to sum the first n natural numbers
第54行 ⟶ 第59行:
i
(iter (- n 1) (+ n i))))
((assertion-violation
'sum "invalid argument" n))))
</syntaxhighlight>
</source>
 
[[迭代器]](iterator)就是一个封装了迭代的对象。
第68行 ⟶ 第73行:
 
[[Category:控制流程]]
[[Category:编程中的迭代]]
[[Category:带有伪代码示例的条目]]