我已經在方案中構建了遞歸函數,它將在某些輸入上重複給定函數f,n次。方案尾遞歸/迭代
(define (recursive-repeated f n)
(cond ((zero? n) identity)
((= n 1) f)
(else (compose f (recursive-repeated f (- n 1))))))
我需要建立與尾遞歸,我想我已經做了正確的,如果我沒有理解錯的尾遞歸這個函數的迭代版本。
(define (iter-repeated f n)
(define (iter count total)
(if (= count 0)
total
(iter (- count 1) (compose f total))))
(iter n identity))
我的問題是,這實際上是迭代?我相信我已經使用尾遞歸正確地構建了它,但是它仍然在技術上推遲了一系列操作,直到count = 0,然後執行堆疊的許多組合。
爲什麼會「推遲了一堆作業,直到N = 0」?在'count = 0'時,你只能返回'total',這可能是最簡單的工作,幾乎沒有任何成本。 –
對,但我想說的是,當你返回總數時,它返回一堆操作,如 '(撰寫方(撰寫方(撰寫方(身份x))))' 它評估當返回總數而不是發生尾部呼叫時。或者我只是過度這樣過度? –
@EddieV在函數被調用之前,函數的所有參數都被評估。 – molbdnilo