La ricorsione non è intrinsecamente migliore o peggiore dei loop: ognuno ha vantaggi e svantaggi e quelli dipendono anche dal linguaggio di programmazione (e dall'implementazione).
Tecnicamente, i loop iterativi si adattano meglio ai sistemi informatici tipici a livello hardware: a livello di codice macchina, un loop è solo un test e un salto condizionale, mentre la ricorsione (implementata ingenuamente) comporta la spinta di un frame dello stack, il salto, il ritorno e il ritorno indietro dallo stack. OTOH, molti casi di ricorsione (specialmente quelli che sono banalmente equivalenti ai loop iterativi) possono essere scritti in modo da evitare il push / pop dello stack; ciò è possibile quando la chiamata di 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 per il richiamo della coda equivale in gran parte a un ciclo iterativo a livello di codice macchina.
Un'altra considerazione è che i cicli iterativi richiedono aggiornamenti di stato distruttivi, il che li rende incompatibili con la semantica del linguaggio puro (senza effetti collaterali). Questo è il motivo per cui i linguaggi puri come Haskell non hanno affatto costrutti loop e molti altri linguaggi di programmazione funzionale o li mancano completamente o li evitano il più possibile.
Il motivo per cui queste domande appaiono così tanto nelle interviste, tuttavia, è perché per rispondere ad esse è necessaria una conoscenza approfondita di molti concetti di programmazione vitale - variabili, chiamate di funzione, ambito e, naturalmente, loop e ricorsione - e hai portare sul tavolo la flessibilità mentale che ti consente di affrontare un problema da due angolazioni radicalmente diverse e di muoverti tra manifestazioni diverse dello stesso concetto.
L'esperienza e la ricerca suggeriscono che esiste una linea tra le persone che hanno la capacità di comprendere variabili, puntatori e ricorsione e quelle che non lo fanno. Quasi tutto il resto della programmazione, inclusi framework, API, linguaggi di programmazione e relativi casi limite, può essere acquisito attraverso lo studio e l'esperienza, ma se non si è in grado di sviluppare un'intuizione per questi tre concetti fondamentali, non si è idonei a essere programmatori. Tradurre un semplice ciclo iterativo in una versione ricorsiva è il modo più rapido possibile di filtrare i non programmatori - anche un programmatore piuttosto inesperto può farlo in 15 minuti, ed è un problema molto indipendente dal linguaggio, quindi il candidato può scegliere una lingua a loro scelta invece di inciampare su idiosincrasie.
Se si riceve una domanda come questa in un'intervista, è un buon segno: significa che il potenziale datore di lavoro è alla ricerca di persone in grado di programmare, non di persone che hanno memorizzato il manuale di uno strumento di programmazione.