Guarda, i libri gratis molto spesso valgono quello che costano... Thinking in Python è l'eccezione: vale molto, molto molto meno di quello che costa.
Ormai ho perso il conto dei principianti che quel libro ha guastato. A un certo punto mi ero pure messo in testa di scrivere una serie di articoli per fare le pulci a quel libro... ne avevo scritto uno
https://pythoninwindows.blogspot.com/2019/05/non-pensare-da-informatico.html (guarda caso c'entra la ricorsione anche qui), e poi però mi ero fermato... ma in effetti il capitolo sulle funzioni è *TERRIFICANTE*, un vero e proprio abisso di stupidità. Dovrei davvero scrivere qualcosa su quel capitolo. Fa piangere il cuore.
> Ho cercato di modificare in questo modo, funziona, ma è corretto?
funziona ed è corretto, pur nel quadro della totale assurdità di tutto il discorso
> E poi una cosa che non mi è chiara, quando passo le funzioni come argomento di altre funzioni,
> perchè si omettono le parentesi tonde? Forse è una domanda stupida
Non è una domanda stupida... è stupido che quel libro non ti spieghi le cose essenziali. Una funzione, tecnicamente, è un oggetto. Un oggetto che si può eseguire. Il nome di una funzione è l'handle (la "maniglia") per quell'oggetto. Rappresenta quell'oggetto. Quando tu scrivi qualcosa, qualsiasi cosa, l'interprete di Python lo deve *valutare*, e deve darti un risultato. Un po' come quando alle elementari la maestra scriveva "2+2" e tu valutavi quell'espressione e la sostituivi con "4" (se eri bravo). Quando tu scrivi il *nome* di una funzione, Python valuta quello che scrivi, e dice: ok, questo è l'oggetto-funzione. Quando tu scrivi il nome della funzione seguito da parentesi, Python valuta quello che scrivi e dice: ok, adesso questo è l'oggetto-funzione *eseguito*. Allora *esegue* la funzione (con gli argomenti eventualmente presenti tra parentesi) e sostituisce la tua espressione con il risultato dell'esecuzione dell'oggetto-funzione. Quando tu passi una funzione a un'altra funzione, quello che vuoi passare è appunto l'oggetto-funzione, non certo il risultato della sua esecuzione. Ecco perché non usi le parentesi.
Ora, il problema è che non posso davvero mettermi a scrivere un manuale di Python sotto forma di post in un forum. Per fortuna il problema ha una soluzione facilissima: butta nel cesso quel libro, e investi un briciolo di denaro in un libro decente. Non te ne pentirai. Il Lutz è sempre la scelta che mi sento di consigliare.