Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [JAVA] Ricorsione

  1. #1

    [JAVA] Ricorsione

    Ciao a tutti, devo risolvere questo problema relativo alla ricorsione:

    con un metodo ricorsivo avente come parametro un array di pila e un intero, devo restituire il numero di occorrenze dell'intero nella pila, ma quando il metodo termina la pila deve essere nella stessa forma che era al momento della chiamata.

    fino a svuotarla e contare il numero di occorrenza ok, ma poi come faccio a riempirla com'era all'inizio? devo usare una pila di appoggio??


    grazie, ciao

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Sezione errata: Java ha una sezione dedicata.

    Sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    sono riuscito a fare questo:

    public static int metodo(intArrayStack p,int x) {

    if(p.isEmpty()) return 0;
    else {
    int i=p.peek();
    p.pop();
    if(i==x) return 1+metodo(p,x);
    if(i!=x) return metodo(p,x);
    p.push(i);
    }
    return 0;
    }

    però non va bene, perchè poi la pila è vuota....

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    La pila è ovviamente vuota perchè l'istruzione return è inserita prima di riaggiungere l'elemento alla pila stessa.
    L'istruzione return termina il metodo e qualunque istruzione posta dopo viene semplicemente ignorata (è come se non esistesse).

    Ti serve una variabile d'appoggio in cui inserire il ritultato della chiamata successiva:
    codice:
    public static int metodo(intArrayStack p,int x) {
       int result = 0;
       if(p.isEmpty()) {
          result = 0;
       } else {
          int i=p.peek();
          p.pop();
          if(i==x) result = 1+metodo(p,x);
          if(i!=x) result = metodo(p,x);
          p.push(i);
       }
       return retult;
    }
    Ricorda che è buona norma utilizzare una sola volta l'istruzione return, sempre alla fine del metodo per evitare errori semantici come questo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    e si è vero, quei due return non servono a niente.

    ok, grazie mille


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.