Python遞迴函式

2022-06-28 11:48:12 字數 1810 閱讀 6804

如下函式呼叫存在建立棧針、print函式壓棧、字串變數壓棧呼叫函式、彈出棧頂、返回值

def foo1(b,b1=3):

print("

foo1 called

",b,b1)

deffoo2(c):

foo3(c)

print("

foo2 called

",c)

deffoo3(d):

print("

foo3 called

",d)

defmain():

print("

main called")

foo1(100,101)

foo2(200)

print("

main ending")

main()

函式直接或間接呼叫自身就是遞迴,遞迴需要有邊界條件,遞迴前進段、遞迴返回段;遞迴一定要有邊界條件,當邊界條件不滿足時,遞迴前進段,當遞迴條件滿足時,遞迴返回。

求斐波那契數列第n項:

迴圈實現

a =0

b = 1n = 10

for x in

range(n):

a,b = b,a+b

print(a)

def fib(n,a=0,b=1):

for x in range(n-1):

a,b=b,b+a

return

afib(10)

def fib(n,a=0,b=1):

for x in

range(n):

a,b=b,b+a

return b

#在不確定邊界的時候將a/b返回

def fib(n,a=0,b=1):

for x in range(n-1):

a,b=b,b+a

return a,b

一定要有退出條件,沒有退出條件就是無限遞迴,遞迴的深度不宜太深,python對遞迴函式有限制,以保護直譯器,超過最大深度則丟擲異常:recursionerror 

import sys 

sys.getrecursionlimit() #能返回最大遞迴次數

函式反覆壓棧,棧記憶體會很快溢位,避免遞迴深度太深,如沒有退出條件則無限遞迴。

def fib3(n,a=0,b=1):

a,b = b,a+b

return a if n < 2 else fib3(n-1,a,b)

def fib3(n,a=0,b=1):

return b if n < 2 else fib3(n-1,a=b,b=a+b)

遞迴實現:

def fib1(n,a=0,b=1):

if n < 3:

return 1

return fib1(n-1) + fib1(n-2)

三元表示式實現:

def fib2(n,a=0,b=1):

return 1 if n < 3 else fib2(n-1) + fib2(n-2)

fib2(10)

使用lru_cache,空間換時間

import

functools

@functools.lru_cache()

def fib(n):

return 1 if n < 3 else fib(n-1) + fib(n-2)

print(fib(101))

573147844013817084101

python遞迴函式例項 python遞迴函式

python遞迴函式 什麼是遞迴?遞迴,就是在函式執行中自己呼叫自己 示例 def recursion n 定義遞迴函式 print n 列印n recursion n 1 在函式的執行種呼叫遞迴 recursion 1 呼叫函式 這個函式在不斷的自己呼叫自己,每次呼叫n 1,看下執行結果 998t...

python靜態遞迴函式 python遞迴函式

一 遞迴的定義 1.什麼是遞迴 在乙個函式裡在呼叫這個函式本身 2.最大遞迴層數做了乙個限制 997,但是也可以自己限制 1 deffoo 2 print n 3 n 1 4 foo n 5 foo 1 驗證997 3.最大層數限制是python預設的,可以做修改,但是不建議你修改。因為如果用997...

python靜態遞迴函式 python 遞迴函式

前言 本篇關於遞迴基本借鑑下面部落格講解加入自己理解。1.遞迴函式定義 如果乙個函式在函式內部呼叫自己,那這個函式就是遞迴函式。如 defsum arg,stop print arg if arg arg arg sum arg,stop sum 1,20 2.遞迴的特性 1 必須有乙個明確的結束條...