我讀過一些關於Scheme中tail-call優化的內容。但我不確定我是否理解尾部呼叫的概念。如果我有這樣的代碼:Scheme中的遞歸函數總是進行尾調優化?
(define (fac n)
(if (= n 0)
1
(* n (fac (- n 1)))))
這可以優化,以便它不會採取堆棧內存? 或可以尾部調用優化僅被施加到這樣的函數:
(define (factorial n)
(let fact ([i n] [acc 1])
(if (zero? i)
acc
(fact (- i 1) (* acc i)))))