[C] Funzione ricorsiva?

alfiere15
Ciao a tutti!
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
vict85
Se scrivi "Abaco" seguito da un invio dovrebbe scriverti "ocabA". Pensaci e capirai il perché.

alfiere15
Ci ho pensato ma non riesco a capire il perché....

apatriarca
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).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.