Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 ITPS - Secondo Anno
 Algoritmi e Strutture Dati + Lab.
 uscire da una funzione ricorsiva
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

john84
Utente medio


Regione: Puglia
Prov.: Bari
Città: noci


Inserito il - 27/12/2007 : 10:25:32  Mostra Profilo  Visita l'Homepage di john84 Invia a john84 un Messaggio Privato  Rispondi Quotando
ciao
dal main() chiamo una funzione trova_nodo() che si trova in un file Albero_bin.h .
la funzione contiene una chiamata a se stessa.
vorrei che quando si verifica una condizione deve uscire dalla funzione immediatamente, senza risalire nello stack restituendo la posizione in cui si trova in quel momento.


template <class T>
typename BinAlbero<T>::posizione BinAlbero<T>::trova_nodo(T a, posizione p){

if (a==leggiNodo(p)){
//esci dalla funzione e restituisci p
}

if (!sinistroVuoto(p)){
trova_nodo(a, figlioSinistro(p));

}

if (!destroVuoto(p)){
trova_nodo(a, figlioDestro(p));
}

}


http://www.djsuonerie.it/contaref/ref.asp?ref=giamal84

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 27/12/2007 : 13:11:49  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
"uscire direttamente senza risalire lo stack" è impossibile... in ogni caso questa funzione nn funziona (scusa il giro di parole :P) tranne il caso in cui il nodo cercato è proprio la radice perchè manca qualche assegnazione...

io la farei così:



template <class T>
typename BinAlbero<T>::posizione BinAlbero<T>::trova_nodo(T a, posizione p){

    bool trovato;
    posizione q = NULL; // devi assegnare a q il valore che per te significa "nessun valore", per esempio: NULL, oppure NIL
    trovato = a==legginodo(p);

    if(!trovato){
        if(!sinistroVuoto(p)){
            q = trova_nodo(a, figlioSinistro(p));
        }

        if (q != NULL && !destroVuoto(p)){ // ovviamente vale lo stesso discorso per questo 'NULL'
            q = trova_nodo(a, figlioDestro(p));
        }
    }else
        q = p;

    return q; // q sarà NULL se il nodo non esiste ;)
}

"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina

john84
Utente medio


Regione: Puglia
Prov.: Bari
Città: noci


Inserito il - 27/12/2007 : 14:08:00  Mostra Profilo  Visita l'Homepage di john84 Invia a john84 un Messaggio Privato  Rispondi Quotando
grazie genius mi sei stato molto di aiuto.

http://www.djsuonerie.it/contaref/ref.asp?ref=giamal84
Torna all'inizio della Pagina

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 27/12/2007 : 15:05:02  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da john84

grazie genius mi sei stato molto di aiuto.




di niente ;)

cmq mi sn accorto ke trovato nn serve :P puoi usare direttamente nell'if
"if(a != legginodo(p))"

inizialmente avevo fatto diversamente, ma adesso puoi toglierlo ;)

"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,19 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000