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.

"Recursion not present" esercizio Larghezza Albero

l
luca.98 (380 points)
1 8 13
in Programmare in python by (380 points)

Salve,volevo sapere come può essere strutturata questa ricorsione in modo che sia riconosciuta dal grade:

def right(dx,level=0):
    if dx:
        level=right(dx.dx,level+1)
    return level

def left(sx,level=0):
    if sx:
        level=left(sx.sx,level-1)
    return level

return right(tree.dx)-left(tree.sx)
272 views
closed

2 Answers

Best answer
a.capobianco1 (16770 points)
11 54 165
by (16.8k points)
selected by

immagino tu ti riferisca all'eser 17 dell'esame del 12-7-18...

io ho provato a mettere le tue istruzioni all'esterno della funzione principale es17 e a richiamarle con il return:

def es17(tree):
    return right(tree.dx)-left(tree.sx)

def right(dx,level=0):
    if dx:
        level=right(dx.dx,level+1)
    return level

def left(sx,level=0):
    if sx:
        level=left(sx.sx,level-1)
    return level

e la ricorsione è stata individuata… tuttavia il test non passa… io ho risolto diversamente… meno stringato del professore ma più semplice per me:

def es17(tree):
    class memo:
        def __init__(self):
            self._min=None
            self._max=None
   
    m=memo()
    _es17(tree, m)
   

def _es17(tree, m, pos=0):
    if m._min == None: m._min=pos
    if m._max == None: m._max=pos
   
    if tree:
        _es17(tree.sx, m, pos-1)
        _es17(tree.dx, m, pos+1)
       
        if m._min > pos: m._min=pos
        if m._max < pos: m._max=pos

l
luca.98 (380 points)
1 8 13
by (380 points)
Perfetto, grazie
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Dove le hai definite queste funzioni?