可能存在無限遞迴 Python之遞迴函式

2021-10-14 17:21:23 字數 1241 閱讀 2073

我們在前面的章節中,很多次的看到了在函式中呼叫別的函式的情況,如果乙個函式在內部呼叫了自身,這個函式就被稱為遞迴函式。

❞高斯求和

def sum_number(n):

total = 0

for i in range(1, n+1):

total += i

return total

sum = sum_number(100)

print(sum)

但如果使用遞迴函式來寫

def sum_number(n):

if n <= 0:

return 0

return n+sum_number(n-1)

sum = sum_number(100)

print(sum)

分析一下**

當n小於0的時候,直接給出和值為0,當n大於0時,結果是n加上sum_number(n-1)。這裡的sum_number(n-1)又是一次sum_number函式的呼叫,不過引數的值變成了n-1,要得到sum_number(n)的值必須等待sum_number(n-1)的值被計算出來,同樣要得到sum_number(n-1)的值必須等待sum_number(n-2)的值,如此一路推算下去,直到sum_number(0),因為if語句的存在,它不需要等待sum_number(-1)的計算了,而是直接給出結果0。然後程式一路返回,直到回到最初的sum_number(n),並給出最終結果。

核心思想

每一次遞迴,整體問題都要比原來減小,並且遞迴到一定層次時,要能直接給出結果。

每乙個遞迴程式都要遵循相同的基本步驟:

例如:使用遞迴函式需要注意遞迴深度溢位,在python中,通常情況下,這個深度是1000層,超過將丟擲異常。在計算機中,函式遞迴呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個遞迴時,棧就會加一層,每當函式返回一層,棧就會減一層。由於棧的大小不是無限的,所以遞迴呼叫的次數過多,會導致棧溢位。

可能存在無限遞迴 遞迴

一 什麼樣的問題可以用遞迴來解決?遞迴問題需要滿足的三個條件 1 問題的解可以分解為幾個子問題 資料規模更小的問題 的解 2 問題與子問題,除了資料規模不同,求解思路完全一樣 3 存在遞迴終止條件 不會無限巢狀 二 為什麼使用遞迴?遞迴的優缺點?1.優點 的表達力很強,寫起來簡潔。2.缺點 時間效率...

可能存在無限遞迴 第3章 遞迴

遞迴只是讓解決方案更清晰,並沒有效能上的優勢。實際上,在有些情況下,使用迴圈的效能更好。如果使用迴圈,程式的效能可能更高 如果使用遞迴,程式可能更容易理解。遞迴函式的組成 1.基線條件 base case 即函式不再呼叫自己,從而避免無限迴圈 2.遞迴條件 recursive case 即自己呼叫自...

PHP實現無限極分類之遞迴方法

面試的時候被問到無限極分類的設計和實現,比較常見的做法是在建表的時候,增加乙個pid欄位用來區別自己所屬的分類 資料在資料庫中儲存大概是這個樣子,怎麼實現無限極遞迴呢,有兩種常用的做法,遞迴和引用演算法 遞迴演算法 array array array id 1,pid 0,name 河北省 arra...