簡介

Iterative Method 中文翻譯作迭代法或疊代法,而在數學領域和電腦程式領域的定義有些不同,數學領域的迭代法指的是無法使用公式一次求解,而須反覆運算求出近似解;而在電腦程式雖然亦有反覆運算的含義,但一般指的是迴圈解。

迭代法透過設定一個初始值開始反覆運算,最後求出答案,是算是一種 Bottom-Up 的模式,通常會和遞迴作比較,實作方式簡易區分如下:

  • 迭代:使用迴圈實作。
  • 遞迴:函式推疊呼叫。

基本上相同的演算法如果能夠直接使用迴圈,因為不透過函式堆疊,效能會比較好。相對於迭代,遞迴就算是一種 Top-Down 的模式。以階乘為範例:

遞迴

1
2
3
4
5
6
function Factorial(n)
if n == 1
return 1
end if
return n * Factorial(n - 1)
end function

遞迴的思考模式,求 n 階的時候當作 n - 1 階已知,相乘即是答案,n - 1 的如何求在 n 階的時候無須理會,就像上級要交由下屬去處理的 Top-Down 模式。

迭代

1
2
3
4
5
6
7
function Factorial(n)
sum = 1
for i = 1 to n
sum = sum * i
end for
return sum
end function

迭代的思考模式,則是單純的逐一處理後回傳,由於他沒有下屬,所以必須自己處理完後回報給上層的 Bottom-Up 模式。

網路上的資料,階乘兩種方式的效能比較

NRecursiveIterative
10334 ticks11 ticks
100846 ticks23 ticks
10003368 ticks110 ticks
100009990 ticks975 ticks
100000stack overflow9767 ticks