in SICP Section 1.2.1 L'autore dà un tale esempio di codice riportato di seguito mostra come utilizzare processo iterativo per risolvere il problema fattoriale:SICP processo ricorsivo vs processo iterativo: utilizzando una procedura ricorsiva per generare un processo iterativo
(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)))
e dire "Può sembrare inquietante che ci riferiamo a una procedura ricorsiva come il fact-iter che genera un processo iterativo. Tuttavia, il processo è realmente iterativo: il suo stato è catturato completamente dalle sue tre variabili di stato e un interprete necessita tenere traccia di solo tre variabili al fine di eseguire il processo. "
Non capisco cosa significhi l'autore. Qual è la differenza tra una procedura ricorsiva e un processo ricorsivo? E perché ha detto la procedura ricorsiva di seguito generando un processo iterativo?
Capito, grazie mille. – zuozuo
È qui che può verificarsi l'ottimizzazione delle chiamate, in cui lo stack non è più necessario e può essere eliminato, corretto? –
@JonSurrell Esattamente. Il materiale quotato spiega come avviene l'ottimizzazione della coda. – Barmar