Non sono sicuro di come vengono create e memorizzate le variabili durante la ricorsione. Di seguito è riportato un esempio tratto dalla C Primer Plus:Come vengono memorizzate le variabili nella ricorsione?
#include <stdio.h>
void recursiontest(int);
int main(){
recursiontest(3);
return 0;
}
void recursiontest(int n){
printf("Level %d : %#x\n", n, &n);
if(n < 4)
recursiontest(n + 1);
printf("LEVEL %d : %#x\n", n, &n);
return;
}
che produce l'uscita:
Livello 3: 0x3ce1f8bc
Livello 4: 0x3ce1f89c
LIVELLO 4: 0x3ce1f89c
LIVELLO 3: 0x3ce1f8bc
Sembra che la variabile "n" locale alla chiamata della funzione originale sia di un indirizzo sequenzialmente successivo a quello della prima (e unica) chiamata ricorsiva. Perché?
Quando chiamo una funzione, i suoi parametri formali non sono dichiarati e definiti in termini dell'argomento effettivamente passato ad esso? Non significherebbe che l'intero n locale alla prima chiamata viene creato prima della seconda chiamata (ricorsiva)? Come potrebbe la n della seconda chiamata avere un indirizzo prima della prima chiamata?
Utilizzare un valore * molto * più basso n (come -99) per vedere davvero una differenza. – Makoto