PDA

View Full Version : [Python] Spiegazione funzione


Frank Cimbali
02-07-2011, 21:31
Salve ragazzi,
anche se da un po' seguo il forum solo oggi ho trovato l'occasione per aprire il primo thread :D

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:


def mult(a,b):
if b == 0:
return 0
rest = mult(a,b - 1)
value = a + rest
return value


e per quanto possa essere banale il concetto (tra l'altro spiegato bene anche nel pdf) non riesco a capire i vari passi che esegue la funzione per ottenere un il risultato (esempio 5 e 4 che restituiscono 20). Qualcuno è capace di spiegarmi la cosa a prova d'idiota? :doh:

ingframin
02-07-2011, 23:33
è 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ì?

Frank Cimbali
03-07-2011, 10:07
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 :D

WarDuck
03-07-2011, 10:15
Per capire bene la ricorsione dovresti conoscere il concetto di record di attivazione, a quel punto dovrebbe essere più semplice :D.

Frank Cimbali
03-07-2011, 10:28
ora leggo grazie per la dritta :cool:

edit: ho scaricato una lezione universitaria su ricorsione e record di attivazione e inizio a capire :)

kevinpirola
03-07-2011, 15:25
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