Visualizzazione dei risultati da 1 a 1 su 1
  1. #1

    Dubbio sulla ricorsione doppia (mutua?)

    Salve a tutti, perdonate la domanda che, per chi è molto più avanti di me, sembrerà sicuramente stupidissima però ho un dubbio in merito all'attivazione dei record (pila) in una ricorsione che, se non ho capito male, dovrebbe definirsi DOPPIA o MUTUA, giusto? Incollo qui in basso il frammento di codice.
    La domanda è: quando, nel main, viene richiesto di calcolare il prodotto fra numeroPrimo e numeroSecondo (poniamo ad esempio che numeroPrimo = 2 e numeroSecondo = 3. Dunque 2x3=6 è il risultato che mi aspetto), il metodo main viene sospeso e:

    1) parte l'attivazione di prodotto(int x, int y) {...}, il quale, a sua volta viene sospeso dall'attivazione del metodo somma(x, prodotto(x, y-1)) {...}
    2) parte l'attivazione di somma(x, prodotto(x, y-1)) {...}

    Cosa accade ora..?? Intendo: da quel che ho capito l'esecuzione di somma(x, prodotto(x, y-1)) {...} dovrebbe di nuovo interrompersi a favore dell'attivazione del metodo più interno, cioè di prodotto(x, y-1), che però al suo interno contiene ancora anche la somma, ovvero.... un cane che si morde la coda. Potreste aiutarmi a capire meglio cosa accade in casi del genere scrivendomi proprio passo dopo passo come vengono aggiornati tutti i parametri? Sicuramente sto tralasciando/confondendo qualcosa...

    Grazie mille davvero!

    codice:
    import javax.swing.JOptionPane;
    
    
    public class CalcolaProdotto {
    
        private static int somma(int x, int y) 
        {
            if(y == 0) return x;
            else return 1 + somma(x, y-1);
        }
        
        private static int prodotto(int x, int y)
        {
            if (y == 0 ) return 0;
            else return somma(x, prodotto(x, y-1));
        }
        
        public static void main(String[] args) 
        {
            int primoNumero = Integer.parseInt(JOptionPane.showInputDialog("Immetti la x"));
            int secondoNumero = Integer.parseInt(JOptionPane.showInputDialog("Immetti la y"));
            
            int risultato = prodotto(primoNumero, secondoNumero);
            System.out.println("Il risultato è: " + risultato);
            
        }
    }
    Ultima modifica di Rei-chan; 05-01-2014 a 20:27
    I'm going under (going under)
    Drowning in you (drowning in you)
    I'm falling forever (falling forever)
    I've got to break through
    I'm going under

    { GOING UNDER - Evanescence }

Tag per questa discussione

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.