Metodo ricorsivo

di il
3 risposte

Metodo ricorsivo

Ciao a tutti ragazzi, ho un piccolo dubbio con questo codice per un metodo ricorsivo. Potete dirmi se è esatto oppure no? Inoltre come faccio a verificare la correttezza tramite esecuzione? Cosa devo inserire nel main?

L'obbiettivo è quello di verificare che gli elementi dell'array sono inseriti in ordine crescente (cioè quello in posizione i è minore di quello in posizione i+1).

private static boolean Minori(int [] a, int i){
boolean result;
if(i==a.length-1)
result = false;
else{
result = Minori(a,i+1);
if(a<a[i+1])
result = true;
}
}
return result;
}

3 Risposte

  • Re: Metodo ricorsivo

    Purtroppo è completamente sbagliato.
    La ricorsione è composta da uno o più casi base + un caso ricorsivo.
    Nel tuo caso se i è uguale ad a.length - 1 significa che sei giunto al caso base (o l'array ha un solo elemento, oppure sei giunto alla fine della ricorsione di coda)... perchè ritorni false?
    Il caso ricorsivo (che tra l'altro è sintatticamente errato e quel codice non compila proprio) lo stai trattando praticamente al contrario: prima fai la chiamata ricorsiva, poi nel caso in cui a (senza indice??) sia minore del successivo sovrascrivi il risultato della chiamata ricorsiva con true fregandotene del risultato precedente...

    Per quanto riguarda il main, dovrai dichiarare una variabile booleana e assegnargli il valore della prima chiamata al metodo, passando a questo un array e l'indice 0. Quindi stampare il valore della variabile booleana (che conterrà il risultato dell'elaborazione) e verificare che sia ciò che ti aspetti (oppure usi un asserzione, se le hai già trattate).
  • Re: Metodo ricorsivo

    SpiritoLibero ha scritto:


    Purtroppo è completamente sbagliato.
    La ricorsione è composta da uno o più casi base + un caso ricorsivo.
    Nel tuo caso se i è uguale ad a.length - 1 significa che sei giunto al caso base (o l'array ha un solo elemento, oppure sei giunto alla fine della ricorsione di coda)... perchè ritorni false?
    Il caso ricorsivo (che tra l'altro è sintatticamente errato e quel codice non compila proprio) lo stai trattando praticamente al contrario: prima fai la chiamata ricorsiva, poi nel caso in cui a (senza indice??) sia minore del successivo sovrascrivi il risultato della chiamata ricorsiva con true fregandotene del risultato precedente...

    Per quanto riguarda il main, dovrai dichiarare una variabile booleana e assegnargli il valore della prima chiamata al metodo, passando a questo un array e l'indice 0. Quindi stampare il valore della variabile booleana (che conterrà il risultato dell'elaborazione) e verificare che sia ciò che ti aspetti (oppure usi un asserzione, se le hai già trattate).
    Grazie per la risposta. Potresti indicarmi la giusta via così riesco a capire meglio il metodo ricorsivo?
  • Re: Metodo ricorsivo

    In parte l'ho già fatto.
    Hai due casi base:

    1) Se i == a.length - 1 allora sei all'ultimo passo della ricorsione (o l'array ha un solo elemento), quindi ritorni true.
    2) Se a[ i ] è MAGGIORE di a[i+1], altro caso base: la sequenza non è in ordine, ritorni false
    3) Passo ricorsivo, ritorni il valore della chiamata ricorsiva.

    I passi 2 e 3 possono essere riassunti in un unico passaggio usando l'operatore && (ragionaci su).
Devi accedere o registrarti per scrivere nel forum
3 risposte