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.

Funzioni e intricatezza

Xriuk (13590 points)
6 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?
498 views
closed with the note: answered

2 Answers

Best answer
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
selected by
Spezzare il codice in funzioni separate è la soluzione.
DRDLCN (8070 points)
27 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)
6 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 (207920 points)
750 1267 2373
by (208k points)
È l'intricatezza massima
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Intanto uno deve sapere come fare...
DRDLCN (8070 points)
27 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)
6 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()