Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Dubbio esercizio di ricorsione dell'Eserciziario Python

kevincukaj (660 points)
2 6 10
in Eserciziario d'esame by (660 points)
recategorized by

L'esercizio chiede:

Dato un albero di tipo AlberoBinario, ritorna il numero di nodi che nell'albero hanno esattamente 2 figli.

             7
            /\
           1  3
          / \
       4    6
       /     /
     5     2
     /       \
   9         8

La funzione, in questo caso deve ritornare 2.

La soluzione fornita era la seguente:

    if tree == None:
        return 0
    count = es48(tree.sx) + es48(tree.dx)      <------------
    if tree.sx != None and tree.dx != None:
        count += 1
    return count

Qualcuno sarebbe gentile da spiegarmi la logica dietro alla terza riga? 

454 views
closed with the note: Dubbio chiarito.

2 Answers

O
Oakandrew (6400 points)
7 27 64
by (6.4k points)
Entra in due nodi successivi, dopodiche entra in 2 nodi successivi di ogni nodo successivo e cosi via fino al caso base, se non c'è il nodo destro oppure sinistro ti restituisce 0 e somma al risultato del nodo destro oppure sinistro del nodo precedente
gusgus (1730 points)
5 8 31
by (1.7k points)
Non capisco cosa tu non riesca a capire, ma in sostanza funziona così: la terza riga somma i punti che le vengono ritornati dalle chiamate, deve ovviamente chiamarne 2 perché ogni nodo ha potenzialmente 2 rami; tornerà 1+1 se entrambi i nodi successivi avranno 2 nodi a loro volta, 1+0 o 0+1 in caso soltanto uno dei due abbia a sua volta 2 nodi e 0+0 in caso nessuno dei due abbia 2 nodi a sua volta
kevincukaj (660 points)
2 6 10
by (660 points)
Ora mi è più chiaro. Grazie