Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Uscire da metodo ricorsivo
Forum - C/C++ - Uscire da metodo ricorsivo

Avatar
MagoAntò (Normal User)
Rookie


Messaggi: 42
Iscritto: 07/02/2009

Segnala al moderatore
Postato alle 19:08
Sabato, 19/05/2012
Ciao a tutti.

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

Codice sorgente - presumibilmente C/C++

  1. void ricorsione (A)
  2. {
  3.         if (!caso banale)
  4.         {
  5.                 ricorsione (A++);
  6.                 cout<<dati relativi ad a;
  7.                 cout<<"Premi un tasto per continuare"<<endl;
  8.                 cin.get();
  9.                 ricorsione (A--);
  10.         }
  11. }



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

Grazie in anticipo.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 1:20
Domenica, 20/05/2012
Un'algoritmo ricorsivo dovrebbe SEMPRE avere un caso base in cui terminare... forse dovresti spiegarci esattamente cosa stai cercando di fare.


Il mio blog: https://piero.dev
PM Quote
Avatar
MagoAntò (Normal User)
Rookie


Messaggi: 42
Iscritto: 07/02/2009

Segnala al moderatore
Postato alle 12:27
Domenica, 20/05/2012
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".

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 3:01
Lunedì, 21/05/2012
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...

Codice sorgente - presumibilmente C#

  1. // Quando e' settata a true ogni chiamata di ricorsione terminera'
  2. // Sembra una soluzione migliore che passare un parametro aggiuntivo
  3. bool g_force_exit = false;
  4.  
  5. void ricorsione (A) {
  6.    if (g_force_exit) return;
  7.  
  8.    if (A != NULL) // In order traversal
  9.  
  10.    if (utente decide di terminare) g_force_exit = true;
  11. }
  12.  
  13. void avvia_ricorsione(){
  14.    g_force_exit = false;
  15.    ricorsione(radice);
  16. }




Il mio blog: https://piero.dev
PM Quote
Avatar
MagoAntò (Normal User)
Rookie


Messaggi: 42
Iscritto: 07/02/2009

Segnala al moderatore
Postato alle 11:53
Martedì, 22/05/2012
Grazie mille per l'aiuto. :)

PM Quote