原 關於線性遞迴與尾遞迴

2022-02-09 01:40:45 字數 458 閱讀 3332

作為讀書筆記使用:

線性遞迴:

1 fac(0) -> 1;

2 fac(n) -> n*fac(n-1).

尾遞迴:

1 fac(0,sum) -> 

2sum;

3 fac(n,sum) ->

4 fac(n-1,sum*n).

尾遞迴定義:

函式最後一步呼叫自身,即最後一行**一定是對於自己的乙個遞迴呼叫。

erlang尾遞迴這樣帶來的好處是可以讓編譯器做到將遞迴優化,轉化為跳轉指令而不是,可以防止棧空間**。

尾遞迴通常的做法是將中間狀態加入到引數中,還可以防止共享變數的問題。這也是傳說中的中間狀態

python中對於尾遞迴的優化我還不得而知,erlang對於線性遞迴做到了一定的優化,gcc也可以。

想去買一本《遞迴可列舉度與圖靈度》

尾遞迴和線性遞迴

線性遞迴 fac 0 1 fac n n fac n 1 尾遞迴 fac 0,sum sum fac n,sum fac n 1,sum n 尾遞迴定義 函式最後一步呼叫自身,即最後一行 一定是對於自己的乙個遞迴呼叫。erlang尾遞迴這樣帶來的好處是可以讓編譯器做到將遞迴優化,轉化為跳轉指令而不是...

遞迴與尾遞迴

1 遞迴 關於遞迴的概念,我們都不陌生。簡單的來說遞迴就是乙個函式直接或間接地呼叫自身,是為直接或間接遞迴。一般來說,遞迴需要有邊界條件 遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進 當邊界條件滿足時,遞迴返回。用遞迴需要注意以下兩點 1 遞迴就是在過程或函式裡呼叫自身。2 在使用遞迴策略時...

遞迴與尾遞迴

1 遞迴 簡單的來說遞迴就是乙個函式直接或間接地呼叫自身,是為直接或間接遞迴。一般來說,遞迴需要有邊界條件 遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進 當邊界條件滿足時,遞迴返回。用遞迴需要注意以下兩點 1 遞迴就是在過程或函式裡呼叫自身。2 在使用遞迴策略時,必須有乙個明確的遞迴結束條件...