Pages: [1]   Go Down
Print
Author Topic: Ricorsione, problemino  (Read 1352 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Dhavamba
Apprendista Forumista
**
Offline Offline

Posts: 286


« on: 20-05-2009, 09:07:33 »

Questo è un esercizio che richiede di vedere se nella stringa c'è il char indicato:

Code:

   public boolean stringa(String s, char a) {
    if (s.length() != 0) {
    if (a == (s.charAt(0))) return true;
    else return stringa(s.substring(1),a); }
    return false;
    }



E' giusto, però non capisco perchè qe gli levo il return come in questo codice mi dà un output erroneo

Code:

   public boolean stringa(String s, char a) {
    if (s.length() != 0) {
    if (a == (s.charAt(0))) return true;
    else stringa(s.substring(1),a); }
    return false;
    }


Scusate o con il return o senza il return la ricorsione richiama il suo stesso metodo che vede all'inizio se il primo char della sottostringa è uguale al char indicato, se questo è giusto ritorna true.
O no?
« Last Edit: 20-05-2009, 09:09:07 by Dhavamba » Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #1 on: 20-05-2009, 09:19:55 »

scusa come fai a togliere il return???che cosa dovrebbe restituirti il metodo se lo levi??
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Dhavamba
Apprendista Forumista
**
Offline Offline

Posts: 286


« Reply #2 on: 20-05-2009, 09:24:19 »

però dentro il metodo c'è il return true quindi che senso ha scrivere un altro return?
Logged
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #3 on: 20-05-2009, 09:38:14 »

Ha senso,eccome! Senza il return nel metodo un eventuale true non viene restituito dal metodo. Ma cosa ti ritorna in questo modo? Sempre false?
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
Dhavamba
Apprendista Forumista
**
Offline Offline

Posts: 286


« Reply #4 on: 20-05-2009, 09:45:16 »

allora nella versione col return tutto giusto invece senza return me lo fà erroneo l'output (cioè se la stringa inizia con il carattere che io voglio trovare mi dà true, se nò false).

Quindi se non metto il return quel return true viene in poche parole scordato???
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #5 on: 20-05-2009, 09:45:55 »

come fa il metodo a sapere che altrimenti deve restituire false se non glielo dici tu?
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Dhavamba
Apprendista Forumista
**
Offline Offline

Posts: 286


« Reply #6 on: 20-05-2009, 09:49:22 »

però il metodo vedendo quel return true lo ignora???
Logged
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #7 on: 20-05-2009, 10:09:36 »

Non viene scordato ma non viene "passato" xké il return che vale è quello della prima chiamata. Quindi se nelle sotto chiamate ritorna true questo valore rimane nel contesto della chiamata ricorsiva.
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
LtWorf
Forumista Esperto
****
Offline Offline

Posts: 1.079

Ogni cosa da me scritta è da intendersi come opinione personale e non come dato di fatto. Anche le eventuali dimostrazioni matematiche da me scritte saranno opinioni personali e quindi dovranno venire dimostrate da una terza parte di fiducia


WWW
« Reply #8 on: 20-05-2009, 14:22:50 »

Il return non viene ignorato, ma il valore viene restituito al metodo chiamante, che non è il chiamante originario. E il valore viene ignorato dal metodo che lo riceve, andando così perduto.
Logged

There are some OO programming languages. I will create the first -_-' language.

LtWorf
Dhavamba
Apprendista Forumista
**
Offline Offline

Posts: 286


« Reply #9 on: 20-05-2009, 17:02:28 »

grazie, avrei un altro problema nell'esercizio che richiede di prendere una matrica n^2 e di immetere i suoi valori in una matrice nxn.

Code:
private int[][] var;

.....

public int[][] immettere(int[] a, int i, int j, int k) {
    if (var == null) {
    i = j = k = 0;
    int b = (int) Math.sqrt(a.length);
    var = new int[b][b]; }
    var[i][j] = a[k];
            if (k != a.length) {
            if (j == var.length - 1) {
            ++i;
            j = 0; }
               else immettere(a, i, ++j, ++k); }
    return var; }




Perchè mi dà un output sbagliato? teoricamente dovrebbe essere giusto!!!
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #10 on: 21-05-2009, 00:02:06 »

grazie, avrei un altro problema nell'esercizio che richiede di prendere una matrica n^2 e di immetere i suoi valori in una matrice nxn.
Ehm... da come hai scritto non si capisce bene cosa richieda l'esercizio .
Ti suggerisco di copiare il testo così com'è dall'esercizio, perchè per "prendere una matrice n^2 (di interi) e immettere i suoi valori in una matrice nxn" mi è sufficiente eseguire
Code:
int [][] nuovaMatrice = (int [][]) matriceOriginale.clone ();
boh
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pages: [1]   Go Up
Print
Jump to: