遞迴尾呼叫

2021-09-24 13:22:53 字數 562 閱讀 3055

什麼是遞迴尾呼叫:

遞迴呼叫放在函式結尾

區別:

def fac(n):

if n == 0:

return 1

else:

return n*fac(n - 1)

def print_fa(n):

if n > 0:

print_fa(n-1)

print(n)

print_fa(10) #結果:1到10

def fac(n):

if n == 0:

return 1

else:

return n*fac(n - 1)

def print_fa(n):

if n > 0:

print(n)

print_fa(n-1)

print_fa(10)#結果 10 到 1

可見 進去遞迴後, 開始入棧, 遞迴後面的函式暫時不執行,

出棧時 才會執行

尾遞迴的優點:可以優化 防止爆棧(然鵝我現在 還不是很清楚 )

尾呼叫 尾遞迴

首先什麼是尾呼叫呢?我的理解是在,函式的最後呼叫乙個函式,並不包含該函式的任何變數。如 def f n return g n 複製 這個就是尾呼叫,尾呼叫的乙個好處就是,不用生成呼叫棧,因為假設是個尾呼叫,那麼當我執行到函式末尾的時候,這個函式相關的資訊我都可以不用保留了,因此不會出現棧溢位的問題。...

尾呼叫和尾遞迴

造成這樣的結果是因為每個函式在呼叫另乙個函式的時候,沒有return該呼叫,所以執行引擎會認為你還沒有呼叫完畢,會保留呼叫幀。而如果使用尾呼叫優化,呼叫幀就永遠只有一條,這個時候就會節省很大一部分的記憶體空間,維護了 執行的流暢性。以上 就叫做尾呼叫優化,這個時候呼叫幀就永遠只有一條,節省了部分記憶...

關於尾呼叫和尾遞迴

1 尾呼叫 指某個函式的最後一步是呼叫另乙個函式。例如 function a n 最後一步呼叫並不意味著在函式的尾部,只要是最後一步即可 function a n return c n 2 什麼樣的情況不是尾呼叫 情況一 function f x 解釋 呼叫g之後,還有賦值操作,故不屬於尾呼叫。情況...