Python遞迴和迭代

2021-06-29 16:29:51 字數 1107 閱讀 8807

遞迴

在函式內部,呼叫函式自身的程式設計技巧稱為遞迴( recursion)。遞迴函式結構清晰,很直觀的理解計算過程,但也有嚴重缺點:相對於普通迴圈而言,遞迴執行效率較低,經過很多冗餘的計算,遞迴會消耗大量的呼叫堆疊。在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀。每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,遞迴呼叫的次數過多,會導致棧溢位。因此,應該盡量用迴圈代替遞迴。

舉個階乘的例子,用函式 ca(n) 表示階乘,ca(n) = n! = 1 * 2 * 3 * 4 * (n-1 ) * n = n * ca(n-1)

def

ca(n):

if n == 1:

return 1

return n*ca(n-1)

函式的計算過程是這樣的:

(ca(5))

(4 * ca(5))

(3 * (4 * ca(5)))

(2 * (3 * (4 * ca(5))))

(1 * (2 * (3 * (4 * (5)))))

迭代利用 for 迴圈來遍歷乙個列表(list)或元組(tuple),將值依次取出,這種方法我們稱為迭代。

for x in range(10):

print x

我們可以用 for 迴圈類計算階乘:

m = 1

for x in range(1,10):

m *=x

>>> print

m>>> 3628800

可以用函式來更加人性化階乘:

def

factorial(x,y):

m =0

if x >0:

for n in (x,y+1):

m *=n

return

mprint factorial(1,10)

python還提供乙個 reduce 函式,利用 lambda 匿名函式,一行**便可以完成階乘的計算:

print reduce(lambda x,y: x*y, range(1,11))

Python遞迴和迭代

遞迴 在函式內部,呼叫函式自身的程式設計技巧稱為遞迴 recursion 遞迴函式結構清晰,很直觀的理解計算過程,但也有嚴重缺點 相對於普通迴圈而言,遞迴執行效率較低,經過很多冗餘的計算,遞迴會消耗大量的呼叫堆疊。在計算機中,函式呼叫是通過棧 stack 這種資料結構實現的,每當進入乙個函式呼叫,棧...

python 迭代和遞迴

1.迭代協議是指 物件必須提供乙個next方法,執行該方法要麼返回迭代中的下一項,要麼就引起乙個stopiteration的異常,以終止迭代 只能往前走,不能回退 2.可迭代物件 實現了迭代協議的物件 如何實現 物件內部定義乙個 iter 方法 3.協議是一種約定,可迭代物件實現了迭代協議,pyth...

遞迴和迭代 迭代與遞迴

很多程式設計小白都會遇到 迭代 和 遞迴 的問題 包括我自己 大部分同學還是不知道迭代與遞迴的區別。下面我就嘗試用最通俗易懂的模式講解遞迴與迭代的區別。1.迭代 迭代其實很簡單,我們在程式設計中經常用到迭代。比如說 i 1 print i 這個就是乙個迭代,沒想到吧。迭代的意思其實就是在迴圈 現了參...