View Full Version : [JAVA] chiarimento sul return algoritmo ricorsivo booleano
stratosfe
03-07-2008, 09:18
Ciao a tutti, ho un dubbio riguardo ad un algoritmo ricorsivo booleano. Se io ho un algoritmo ricorsivo su un albero binario e lo implemento nel seguente modo:
static boolean metodoR (AlberoB A,int x) {
if (A==null)
return false;
se io a questo punto del metodo faccio un return al metodo stesso, quindi facendolo diventare metodo ricorsivo, la funzione mi può restituire true anche senza che io faccio return true?
tipo cosi...
return x==a.val() || metodoR(A.sin(),x) ,metodoR(a.des(),x);
il metodo val() restituisce la radice dell albero... e sin e des restituiscono il sottoalbero sinistro e destro..
wizard1993
03-07-2008, 09:34
non ho capito un tubo di quel che vuoid ire; puoi per favore provare a esprimerti meglio?
banryu79
03-07-2008, 09:40
...
se io a questo punto del metodo faccio un return al metodo stesso, quindi facendolo diventare metodo ricorsivo, la funzione mi può restituire true anche senza che io faccio return true?
...
la parola chiave return restituisce il valore dell'espressione che la segue.
Quindi se richiami subito dopo il return un metodo che torna un boolean (oppure un'espressione più complessa che comunque alla fine è un'espressione booleana) allora la risposta è sì.
Nel tuo caso, richiamando il metodo stesso dopo il return stai in effetti effettuando una chiamata ricorsiva.
Non aver paura di sperimentare: tanto se l'espressione che scrivi dopo il return desse come tipo di risultato un non-boolean il compilatore si lamenterebbe e tu lo sapresti subito.
stratosfe
03-07-2008, 11:01
Ok provo ad esprimermi meglio... vi scrivo tutto il metodo...
static boolean appare(Albero A,int x) {
if (A==null)
return false;
return x==A.val() || appare(A.sin(),x) || appare(A.des(),x);
}
static boolean metodoR(Albero A,int x) {
if (A==null)
return false;
return appare(A.sin(),x) && appare(A.des(),x) || metodoR(A.sin(),x) || metodoR(A.des(),x);
}
La funzione metodoR deve restituire true se l'intero x è presente sia a sinistra che a destra dell albero..
Facendo il return in quel modo sulla funzione metodoR, essa mi restituisce true?
return x==a.val() || metodoR(A.sin(),x) ,metodoR(a.des(),x);
Se la parte in grassetto è vera il metodo restituisce true, altrimenti fa lo stesso controllo sui sottoalberi destro e sinistro di a.
P.S.:Ma poi... è a o A? Attenzione che è diverso: tutti i linguaggi di programmazione (escluso VisualBasic :rolleyes: ) sono case sensitive
stratosfe
03-07-2008, 11:21
scusa è A..! quindi anche se non metto nel return true, la funzione nel caso in cui x==A.val() è vera restituisce true ugualmente?
scusa è A..! quindi anche se non metto nel return true, la funzione nel caso in cui x==A.val() è vera restituisce true ugualmente?
Esatto. Questo perchè x==A.val() è un'espressione booleana che restituisce true se i due operandi sono uguali.
stratosfe
03-07-2008, 11:36
Senti un altra kosa....
Se nel caso il return del primo if è true, se faccio sempre lo stesso secondo return questa volta mi restituisce false in automatico?
Mi sai dire la differenza che c'è tra && e || nell ultimo return?
static boolean uguali(Albero A,Albero B) {
if (A==null && B==null) {
return true;
if (A.val()!=B.val())
return false;
return uguali(A.sin(),B.sin()) && uguali(A.des(),B.des());
Senti un altra kosa....
Se nel caso il return del primo if è true, se faccio sempre lo stesso secondo return questa volta mi restituisce false in automatico?
Non capisco la domanda. Spiegati meglio per favore.
Mi sai dire la differenza che c'è tra && e || nell ultimo return?
Sono due operatori booleani:
a && b restituisce true se e solo se sia a che b sono true.
a || b restituisce false se e solo se sia a che b sono false.
khelidan1980
03-07-2008, 12:07
sei arrivato a fare operazioni sugli alberi senza sapere la differenza tra and e or? :mbe:
stratosfe
03-07-2008, 14:02
Non capisco la domanda. Spiegati meglio per favore.
Sono due operatori booleani:
a && b restituisce true se e solo se sia a che b sono true.
a || b restituisce false se e solo se sia a che b sono false.
ma scusate ma a || b nn può restituire true se una tra a e b è true?
ma scusate ma a || b nn può restituire true se una tra a e b è true?
:confused: Naturalmente si.
Quando non restituisce false, restituisce true.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.