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

Do you need help?

Funzioni e intricatezza

Xriuk (13590 points)
8 24 116
in Es1 by (13.6k points)
closed by
Come funziona esattamente il calcolo dell'intricatezza? Perchè ho notato che se divido il codice in funzioni diminuisce l'intricatezza, anche solo lo spostare un ciclo in una nuova funzione fa diminuire l'intricatezza (perchè il ciclo viene considerato ora come una singola istruzione).

È un comportamento valido?
510 views
closed with the note: answered

2 Answers

Best answer
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
selected by
Spezzare il codice in funzioni separate è la soluzione.
DRDLCN (8070 points)
28 68 104
by (8.1k points)
Io ho spezzato il codice in 4 funzioni separate, quando lancio il test dell'intricatezza con radon, l'intricatezza finale mi viene 3.4
perchè sulla tabella la mia intricatezza è 7?
Xriuk (13590 points)
8 24 116
by (13.6k points)
Scusi, prof, ma non è "barare"? Spezzare il codice in più funzioni solo per gestire dei cicli for? Oltre a provocare un overhead nelle mille chiamate a funzioni ogni volta.
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
È l'intricatezza massima
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
Intanto uno deve sapere come fare...
DRDLCN (8070 points)
28 68 104
by (8.1k points)
Si riduce l'intricatezza totale.

Ma da come ho visto nella tabella di Sterbini con i primi risultati  viene presa in considerazione l'intricatezza massima.

Quindi ancche se sposti un blocco di for in una  funzione, si l'intricatezza totale si abbassa, ma il dato che va in tabella è l'intricatezza più alta, quindi non risolvi il problema.
Xriuk (13590 points)
8 24 116
by (13.6k points)
Se io ho una struttura di questo tipo, di complessità 3:
def es():
    for <...>:
      if <...>:
        [...]
      else:
        [...]
Nel caso di sotto se sposto il blocco interno in un'altra funzione, a livello di tempistiche di esecuzione non so quanto mi convenga, ma la complessità massima si riduce a 2:
def func:
   if <...>:
     [...]
   else:
     [...]

def es():
    for <...>:
       func()