Spiegazione della ricorsione

0

Non riesco a capire questo esempio di ricorsione di base.

Quando ho eseguito questo codice. L'output era 43210. L'output non dovrebbe essere 44444, poiché il valore di num viene aggiornato a 4 alla chiamata ricorsiva più recente o in che modo viene modificato il valore di num?

Spiega, qualsiasi aiuto è apprezzato.

    
posta penta 16.06.2017 - 12:08
fonte

1 risposta

7

La parte difficile da comprendere di questo tipo di ricorsione è che ci sono molte variabili differenti coinvolte, tutte chiamate "num" .

Ogni volta che chiami una funzione, viene creata una nuova copia di tutte in quella funzione ("allocata"). (Il nome formale per l'area in cui ciò accade è "stack frame".)

La definizione di variabili locali include parametri e il meccanismo funziona anche quando la funzione chiamante e la funzione chiamata hanno la stessa definizione di funzione. Combinati, questi due meccanismi generano una cascata di variabili con valori diversi esistenti contemporaneamente (ma solo una nell'invocazione attiva attualmente).

Un buon strumento per capire questo è un debugger con uno stack frame viewer che consente di espandere le variabili locali in tutti i frame attualmente esistenti, non solo quello più in alto. Questo ti permette di verificare che sì, in effetti c'è un num con valore 1 e un diverso num con valore 2 allo stesso tempo.

    
risposta data 16.06.2017 - 12:15
fonte

Leggi altre domande sui tag