7
在SICP Section 1.2.1提交給諸如下面的代碼實例來說明如何使用迭代過程來解決階乘問題:SICP遞歸過程VS迭代過程:使用遞歸過程來生成一個迭代過程
(define (factorial n)
(fact-iter 1 1 n))
(define (fact-iter product counter max-count)
(if (> counter max-count)
product
(fact-iter (* counter product)
(+ counter 1)
max-count)))
並且說「看起來令人不安的是,我們將一個遞歸過程(例如fact-iter)稱爲生成一個迭代過程。然而,這個過程確實是迭代的:它的狀態完全被它的三個狀態變量捕獲,並且解釋器需要跟蹤只有三個變量才能執行該過程。「
我不明白作者的意思。遞歸過程和遞歸過程有什麼區別?爲什麼他說下面的遞歸過程產生一個迭代過程?
明白了,非常感謝。 – zuozuo
這是所有可以進行呼叫優化的地方,堆棧不再需要,可以丟棄,正確嗎? –
@JonSurrell準確無誤。引用的內容解釋了尾部呼叫優化是如何發生的。 – Barmar