Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [JAVA] Ricorsione

  1. #1

    [JAVA] Ricorsione

    Salve a tutti, non sono riuscito a capire se questo thread rispetta il regolamento oppure no, ad ogni modo chiedo scusa nel caso fosse così.
    Non riesco assolutamente ad afferrare il concetto della ricorsione, ad esempio se ho questo frammento di codice :

    codice:
    public static boolean occorreRic (int[] a, int n){
      return occorreRic(a,n,o);
    }
    
    public static boolean occorreRic (int[] a, int n, int i){
      if (i == a.length)
        return false;
      if (a[i] == n)
        return true;
      return occorreRic(a,n,i+1);
    }
    Allora, ho capito che la ricorsione consiste in un metodo che richiama se stesso, e nel caso di ricerca in array devo fare la ricorsione annidata, quindi devo creare un metodo ricorsivo di controllo e un metodo di ricerca.
    Ma esattamente come lavora la ricorsione?

    Grazie
    Tacconi Marco

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    quando fai la ricorsione chiami te stesso, in genere non un metodo overloaded.

    Devi fissare due cose: punto di stop e punto di chiamata a te stesso.
    Prova a pensare al calcolo di un fattoriale: hai un valore intero, (es. 4) , 4! equivale a

    4*3*2*1

    ricordando che 0! = 1.

    un metodo ricorsivo potrebbe essere

    codice:
    	public static int ric(int val ){
    		  if (val==0) return 1;
    		  else return val * ric(val-1);
    	}
    poi vedi tu cosa devi fare
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Guardando i tuoi metodi, direi che il primo, occorreRic (int[] , int ), non è ricorsivo, ma è il metodo che va chiamato per far iniziare la ricorsione.

    Il secondo metodo occorreRic (int[], int, int) è il metodo ricorsivo vero e proprio, ma credo che in genere vada definito "private" e non "public", perché dovrebbe essere invocato solo tramite il precedente.

    Una osservazione possibile è che l'array A contiene n se la prima cella di A è n oppure il resto di A (tutte le celle di A tranne la prima) contiene n.

    Ora però anche il resto di A, chiamiamolo A' è un array, per cui la soluzione è come sopra: A' contiene n se la prima cella di A' è n oppure il resto di A' contiene n.

    La tecnica è la stessa, ma viene applicata su array più piccolo.

    Appena trovi n come primo elemento, cominci a "risalire" la ricorsione perché puoi già dire che A contiene n.

    Se non trovi nulla in nessun sottoarray, restituisci false
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.