La ricorsione non è intrinsecamente migliore o peggiore dei cicli - ognuno presenta vantaggi e svantaggi e anche quelli dipendono dal linguaggio di programmazione (e dall'implementazione).
Tecnicamente, i loop iterativi si adattano meglio ai sistemi di computer tipici a livello di hardware: a livello di codice macchina, un ciclo è solo un test e un salto condizionato, mentre la ricorsione (implementata in modo ingenuo) comporta il push di uno stack frame, il salto, il ritorno, e tornando indietro dalla pila. OTOH, molti casi di ricorsione (specialmente quelli che sono banalmente equivalenti ai loop iterativi) possono essere scritti in modo tale che lo stack push / pop possa essere evitato; questo è possibile quando la chiamata alla funzione ricorsiva è l'ultima cosa che accade nel corpo della funzione prima di tornare, ed è comunemente nota come ottimizzazione della chiamata di coda (o ottimizzazione della ricorsione di coda ) . Una funzione ricorsiva ottimizzata in coda è per lo più equivalente a un loop iterativo a livello di codice macchina.
Un'altra considerazione è che i loop iterativi richiedono aggiornamenti di stato distruttivi, il che li rende incompatibili con la semantica di linguaggio pura (senza effetti collaterali). Questo è il motivo per cui i linguaggi puri come Haskell non hanno affatto costrutti di loop, e molti altri linguaggi di programmazione funzionale ne mancano completamente o li evitano il più possibile.
Il motivo per cui queste domande appaiono così tanto nelle interviste, però, è perché per rispondere a queste domande è necessaria una conoscenza approfondita di molti concetti vitali di programmazione: variabili, chiamate di funzioni, scope e, naturalmente, loop e ricorsione -, e devi portare la flessibilità mentale al tavolo che ti consente di affrontare un problema da due angoli radicalmente diversi e spostarti tra le diverse manifestazioni dello stesso concetto.
L'esperienza e la ricerca suggeriscono che esiste una linea che separa le persone che hanno la capacità di comprendere variabili, indicatori e ricorsività e quelli che non lo fanno. Quasi tutto il resto nella programmazione, inclusi framework, API, linguaggi di programmazione e casi limite, può essere acquisito attraverso lo studio e l'esperienza, ma se non si riesce a sviluppare un'intuizione per questi tre concetti chiave, non si è idonei a diventare programmatori. La traduzione di un semplice loop iterativo in una versione ricorsiva riguarda il modo più rapido di filtrare i non programmatori - anche un programmatore piuttosto inesperto può farlo in 15 minuti, ed è un problema molto indipendente dalla lingua, quindi il candidato può scegliere una lingua di loro scelta invece di inciampare sulle idiosincrasie.
Se ricevi una domanda come questa in un'intervista, è un buon segno: significa che il potenziale datore di lavoro cerca persone che possono programmare, non persone che hanno memorizzato il manuale di uno strumento di programmazione.