[C] Funzione ricorsiva?
Ciao a tutti!
Ho questo codice:
L'ho eseguito sul computer. Mi fa inserire un carattere, ad esempio 'a', dopo di che mi riscrive 'a' e termina l'esecuzione.
Che cosa rappresenta quel codice? Sembrerebbe una funzione ricorsiva. Ma perché ha quel comportamento in esecuzione?
Ho questo codice:
#include <stdio.h> #include <stdlib.h> void scrivi_lo (void); int main() { scrivi_lo (); system ("PAUSE"); return 0; } void scrivi_lo (void){ int c; if ((c=getchar())!='\n') scrivi_lo (); putchar(c); }
L'ho eseguito sul computer. Mi fa inserire un carattere, ad esempio 'a', dopo di che mi riscrive 'a' e termina l'esecuzione.
Che cosa rappresenta quel codice? Sembrerebbe una funzione ricorsiva. Ma perché ha quel comportamento in esecuzione?
Risposte
Se scrivi "Abaco" seguito da un invio dovrebbe scriverti "ocabA". Pensaci e capirai il perché.
Ci ho pensato ma non riesco a capire il perché....
La funzione viene chiamata ricorsivamente leggendo un carattere per volta fino a quando non viene letto un carattere di a capo. A questo punto ritorna stampando il carattere che aveva letto (e siccome le chiamate ricorsive si chiudono in ordine inverso in cui vengono chiamate il testo appare stampato al contrario).