您好,登錄后才能下訂單哦!
函數執行流程
def foo1(b,b1=3): print("foo1 called",b,b1) def foo2(c): foo3(c) print("foo2 called",c) def foo3(d): print("foo3 called",d) def main(): print("main called") foo1(100,101) foo2(200) print("main ending ")
函數執行過程:
函數中壓棧,執行流程。
遞歸Recursion
遞歸要求
斐波那契數列實現(f(1)=1,f(2)=1,f(3)=f(1)+f(2),f(4)=f(2)+f(3)……)
#斐波那契數列普通循環實現 a,b=0,1 for i in range(4): a,b=b,a+b print(a) #斐波那契數列函數遞歸實現 def foo(n): #大量的重復計算 return 1 if n<3 else foo(n-1)+foo(n-2) #斐波那契數列函數循環實現 def fn(n,a=0,b=1): a,b=b,a+b if n==1: return a return fn(n-1,a,b)
遞歸的性能
循環稍微復雜一些,但是只要不是死循環,可以多次迭代直至算出結果
遞歸還有深度限制,如果遞歸復雜,函數反復壓棧,棧內存很快會溢出
間接遞歸
def foo1(): foo2() def foo2(): foo1()
間接遞歸,是通過別的函數調用了函數自身,但是如果構成了循環遞歸調用是非常危險的,但是往往這種情況在代碼復雜的情況下,還是有可能發生這種調用的,要用代碼的規范來避免這種遞歸調用的發生
遞歸總結
以上所述是小編給大家介紹的python遞歸函數詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。