2013-07-16 75 views
0

我一直在閱讀了很多關於尾巴文章recursion.But我仍然不清楚的尾遞歸如何不使用堆棧空間。尾遞歸中的局部變量?

怎麼樣的局部變量和函數參數?它們也存儲在堆棧中。在尾遞歸的情況下會發生什麼?它與正常遞歸有什麼不同?

「尾調用[尾遞歸]是打扮成一個呼叫的一種跳轉的」

這到底是什麼意思?

回答

3

局部變量都忘了。尾調用遞歸的關鍵在於它是函數中最後一件事情,所以在調用之後局部變量不會有問題。事實上,沒有「通話後」就是最後一次優化的全部內容。

編輯:關於報價:

在尾部調用優化的情況下,這兩者是等價的:

fn(x) { 
    .... 
    fn(y); 
} 

fn(x) { 
    start: 
    .... 
    x = y; 
    goto start; 
} 
+0

尾調用是一種goto語句打扮成一個叫」 你能否更清楚這到底是什麼意思 –

+0

@RahulKurup:編輯。 – Amadan