|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jul 2011
Messaggi: 4
|
[Python] Spiegazione funzione
Salve ragazzi,
anche se da un po' seguo il forum solo oggi ho trovato l'occasione per aprire il primo thread ![]() Per hobby ho deciso di studiare un linguaggio di programmazione anche per dilettarmi con qualche idea che ho in mente. La scelta è ricaduta su Python e dal sito ho scaricato dell'ottimo materiale per iniziare a capirci qualcosa. Sul capitolo delle funzione viene fatto questo esempio di moltiplicazione: Codice:
def mult(a,b): if b == 0: return 0 rest = mult(a,b - 1) value = a + rest return value ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
|
è semplice :-)
La funzione è ricorsiva in pratica quando la chiami che fa: Supponiamo che siano a = 5 e b = 4 1) qui b vale 4 2)rest = mult(a,b-1) 2.1) qui b vale 3 2.2) rest = mult(a,b-1) 2.2.1) qui b vale 2 2.2.2) rest = mult(a,b-1) 2.2.2.1) qui b vale 1 2.2.2.2) rest = mult(a,b-1) 2.2.2.2.1) Qui b vale 0! 2.2.2.2.2) restituisce 0 2.2.2.3)rest = a+0 #rest = 5 2.2.3) rest = a+rest#rest = 10 2.3) rest = a+rest#rest = 15 3) rest = a+rest# rest = 20 ti è più chiaro così?
__________________
L'elettronica digitale non esiste, è solo elettrotecnica con interruttori piccoli! ![]() |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Jul 2011
Messaggi: 4
|
Ammetto che ho davvero difficoltà a pensare in ricorsivo sopratutto in questo caso. Quello che non capisco come rest incrementi il suo valore a ogni ricorsione per ottenere il 5 + 15 finale. Forse è un segnale del destino di mollare la programmazione e iniziare altro
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12838
|
Per capire bene la ricorsione dovresti conoscere il concetto di record di attivazione, a quel punto dovrebbe essere più semplice
![]() Ultima modifica di WarDuck : 03-07-2011 alle 10:18. |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Jul 2011
Messaggi: 4
|
ora leggo grazie per la dritta
![]() edit: ho scaricato una lezione universitaria su ricorsione e record di attivazione e inizio a capire ![]() Ultima modifica di Frank Cimbali : 03-07-2011 alle 10:41. |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Sep 2010
Messaggi: 102
|
in poche parole la cosa deriva dal concetto di moltiplicazione studiato alle elementari
cos'è una moltiplicazione? è sommare tot volte lo stesso numero. Perciò cosa faccio? prendo A che è il numero prendo MEMORIA che è la memoria delle operazioni che sto facendo prendo B che è il numero di volte che devo sommare A (secondo fattore). cosa faccio? Innanzitutto MEMORIA è = 0. comincio a sommare uno dopo l'altro: A + 0 (che è MEMORIA). Questo è il primo passo, perciò devo scalarmi un segnaposto da B, che diventa B-1 poi faccio di nuovo la stessa operazione: A + MEMORIA (che adesso viene 2A) e scalo di 1 da B. ecc ecc finchè B è uguale a zero vuol dire che ho già effettuato tutte le somme prescritte dal secondo fattore. In ricorsivo vuol dire che la funzione la chiamo una volta sola e visto che è sempre la stessa operazione che devo fare essa si richiama finchè B = 0. finito di richiamarsi fa le somme all'indietro. spero ti sia più chiaro |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:01.