在球拍,我定義了下面的函數,我想知道它是否是尾遞歸:是這個函數尾遞歸嗎?
(define foo
(λ (c m s1 s2)
(if (< c m)
(if (= (modulo m c) 0)
(foo (+ c 1) m (+ s1 c) s2)
(foo (+ c 2) m s1 (+ s2 c)))
(cons s1 s2))))
我的問題實際上是這樣的,但我必須寫別的東西來滿足我後質量標準。實際上,我不知道我的職位質量標準是。
我很難想象解釋器在這種情況下如何重複使用與最優化相同的調用堆棧。 – 2013-03-18 14:42:30
在我上面的實現中,它更加清晰,將'foo'的尾調用看作一個奇怪的'for for',其中參數是每次迭代中更新的變量,第一個條件是循環的退出條件。然後很容易看到,相同的堆棧幀在調用之間重複使用 - 只有參數值需要更新 – 2013-03-18 15:05:01
非常感謝。 – 2013-03-18 15:12:50