Python3 遞迴函式

2022-08-24 15:42:14 字數 1557 閱讀 4782

在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。

def

calc(n):

print

(n)

if int(n/2) ==0:

return

n

return calc(int(n/2))

calc(10)

輸出:105

21

遞迴特性:1. 必須有乙個明確的結束條件,最多遞迴999次

2. 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少

3. 遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位)

應用案例:

#二分查詢

data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

defbinary_search(dataset,find_num):

print

(dataset)

if len(dataset) >1:

mid = int(len(dataset)/2)

if dataset[mid] == find_num: #

find it

print("

找到數字

",dataset[mid])

elif dataset[mid] > find_num :#

找的數在mid左面

print("

\033[31;1m找的數在mid[%s]左面\033[0m

" %dataset[mid])

return

binary_search(dataset[0:mid], find_num)

else:#

找的數在mid右面

print("

\033[32;1m找的數在mid[%s]右面\033[0m

" %dataset[mid])

return binary_search(dataset[mid+1:],find_num)

else

:

if dataset[0] == find_num: #

find it

print("

找到數字啦

",dataset[0])

else

:

print("

沒的分了,要找的數字[%s]不在列表裡

" %find_num)

binary_search(data,66)

Python3 遞迴函式

1.必須有乙個明確的結束條件 2.每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少 3.遞迴效率不高,遞迴層次過多會導致棧溢位 在計算機中,函式呼叫是通過棧 stack 這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,...

Python3 遞迴函式

1 def fat n 2 result 13 for i in range 2,n 1 4 result result i5 return result6 print fat 5 7 8 9 def digui x 10 if x 1 11 return 112 return x digui x ...

Python3 遞迴函式

遞迴,就是函式在執行的過程中呼叫自己。示例 def recursion n print n recursion n 1 recursion 1 出現的效果就是,這個函式在不斷的呼叫自己,每次呼叫就n 1,相當於迴圈了。可是為何執行了900多次就出錯了呢?還說超過了最大遞迴深度限制,為什麼要限制呢?通...