如下函式呼叫存在建立棧針、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 =0b = 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,空間換時間
importfunctools
@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 必須有乙個明確的結束條...