Dire che stiamo scrivendo una semplice funzione ricorsiva fib(n)
che calcola l'ennesimo numero di Fibonacci. Ora, vogliamo che la funzione stampi l'ennesimo numero. Poiché la stessa funzione viene richiamata ripetutamente, deve essere presente una condizione che consenta solo la chiamata root a stampare. La domanda è: come scrivere questa condizione senza passare alcun argomento aggiuntivo, o usando variabili globali/statiche.Come rilevare la chiamata ricorsiva di root?
Così, abbiamo a che fare con qualcosa di simile:
int fib(int n) {
if(n <= 0) return 0;
int fn = 1;
if(n > 2) fn = fib(n-2) + fib(n-1);
if(???) cout << fn << endl;
return fn;
}
int main() {
fib(5);
return 0;
}
ho pensato che la chiamata radice differisce da tutti i bambini con il ritorno a un chiamante diverso, vale a dire il metodo principale in questo esempio. Volevo sapere se è possibile usare questa proprietà per scrivere la condizione e come.
Aggiornamento: si prega di notare che questo è un esempio inventato che serve solo a presentare l'idea. Questo dovrebbe essere chiaro dai tag. Non sto cercando soluzioni standard. Grazie.
Come indicato in molte risposte, è pratica comune creare una funzione wrapper che avvia la ricorsione. L'elaborazione personalizzata prima/dopo (come IO) può andare lì. –