Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Ricorsione alberi

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Grazie mille! Finalmente grazie a te sono riuscito a risolverlo.
    Figurati!

    Per quanto riguarda la somma degli elementi puoi vederla in questo modo:
    cosa significa calcolare la somma degli elementi di un albero?
    - caso base: se un albero ha un solo elemento (è una foglia) allora la somma equivale al valore della foglia
    - caso ricorsivo: la somma degli elementi di un sottoalbero è il valore del nodo corrente più la somma dei valori calcolati nei sottoalberi del nodo corrente.

    Quindi a ogni passo di ricorsione devi calcolare la somma dei sottoalberi, indipendentemente da quella che hai già calcolato.
    Se invece passi ai sottoalberi la somma che hai gia calcolato (come stai facendo) finirai per calcolare il valore degli stessi nodi più volte.

    codice:
    //non passo più la somma come parametro
    ppublic static int sum(Tree<Integer> t, Position<Integer> p) {
            if(t.isExternal(p))
                return p.element();
            if(t.isInternal(p)) {
                int somma = 0 // inizializzo qui la somma a zero 
                for(Position<Integer> i:t.children(p))
                    somma = somma + p.element() + sum(t,i);//calcolo la somma solo dei sottoalberi
            }
            return somma;//la ricorsione penserà a fare via via tutte le somme dei sottoalberi mentre risalirà verso l'alto
        }
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

  2. #2
    Quote Originariamente inviata da Nikopol Visualizza il messaggio
    Figurati!

    Per quanto riguarda la somma degli elementi puoi vederla in questo modo:
    cosa significa calcolare la somma degli elementi di un albero?
    - caso base: se un albero ha un solo elemento (è una foglia) allora la somma equivale al valore della foglia
    - caso ricorsivo: la somma degli elementi di un sottoalbero è il valore del nodo corrente più la somma dei valori calcolati nei sottoalberi del nodo corrente.

    Quindi a ogni passo di ricorsione devi calcolare la somma dei sottoalberi, indipendentemente da quella che hai già calcolato.
    Se invece passi ai sottoalberi la somma che hai gia calcolato (come stai facendo) finirai per calcolare il valore degli stessi nodi più volte.

    codice:
    //non passo più la somma come parametro
    ppublic static int sum(Tree<Integer> t, Position<Integer> p) {
            if(t.isExternal(p))
                return p.element();
            if(t.isInternal(p)) {
                int somma = 0 // inizializzo qui la somma a zero 
                for(Position<Integer> i:t.children(p))
                    somma = somma + p.element() + sum(t,i);//calcolo la somma solo dei sottoalberi
            }
            return somma;//la ricorsione penserà a fare via via tutte le somme dei sottoalberi mentre risalirà verso l'alto
        }
    Grazie ancora! Grazie a te sto finalmente capendo la logica che c'è dietro la ricorsione .

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.