Oppure

Loading
19/05/12 17:08
MagoAntò
Ciao a tutti.

Vorrei permettere all'utente di uscire da un metodo ricorsivo di questo tipo quando viene digitato un carattere particolare, diciamo 'm':

void ricorsione (A)
{
	if (!caso banale)
	{
		ricorsione (A++);
		cout<<dati relativi ad a;
		cout<<"Premi un tasto per continuare"<<endl;
		cin.get();
		ricorsione (A--);
	}
}


E' possibile farlo? Temo di no, non è possibile uscire dallo stack al termine delle chiamate ricorsione(A++)...

Grazie in anticipo.
aaa
19/05/12 23:20
pierotofy
Un'algoritmo ricorsivo dovrebbe SEMPRE avere un caso base in cui terminare... forse dovresti spiegarci esattamente cosa stai cercando di fare.
Il mio blog: piero.dev
20/05/12 10:27
MagoAntò
Si, mi spiego meglio: è un algoritmo ricorsivo per la visita inorder di un albero binario, quindi il caso banale è "if (nodo != NULL)".

Nel caso specifico del mio programma, l'albero da visitare è molto grande, quindi avevo pensato di mostrare le informazioni di ciascun nodo dando, però, la possibilità all'utente di fermare la visita al termine della stampa delle informazioni di ciascun nodo, una cosa del tipo "Premi e per uscire, un altro tasto per continuare".
aaa
21/05/12 1:01
pierotofy
Io utilizzerei una variabile globale... sembra uno di quei casi in cui utilizzare una variabile globale e' la soluzione migliore rispetto a passare un argomento aggiuntivo alla funzione ricorsiva. Magari utilizza una seconda funzione per inizializzare la ricorsione...

// Quando e' settata a true ogni chiamata di ricorsione terminera'
// Sembra una soluzione migliore che passare un parametro aggiuntivo
bool g_force_exit = false;

void ricorsione (A) { 
   if (g_force_exit) return;

   if (A != NULL) // In order traversal

   if (utente decide di terminare) g_force_exit = true;
}

void avvia_ricorsione(){
   g_force_exit = false;
   ricorsione(radice);
}

Il mio blog: piero.dev
22/05/12 9:53
MagoAntò
Grazie mille per l'aiuto. :)
aaa