Sintetitza¶
Dissenya la versió recursiva de l’esquema de recorregut sintetitza.
Desa al mòdul esquemes la funció recursiva següent:
- esquemes.sintetitza(acumula, seq, neutre)¶
Aplica la funció acumula als elements de la seqüència seq començant per neutre i el d’índex 0
- Paràmetres:
acumula – funció amb dos paràmetres.
seq – seqüència amb els elements a acumular.
neutre – element neutre de l’operació acumula.
- Retorna:
acumula(...acumula(acumula(neutre, seq[0]), seq[1])..., seq[-1])
Per exemple:
>>> s = [8, 3, 5, 2] >>> sintetitza(operator.add, s, 0) 18 >>> sintetitza(max, s, s[0]) 8 >>> sintetitza(operator.mul, s, 1) 240
Disposes de més jocs de proves al fitxer
test-sintetitza.txt i d’una solució al fitxer
esquemes.py.
Solucions¶
Recursiva lineal¶
def sintetitza_1(acumula, seq, neutre):
if len(seq) == 0:
r = neutre
else:
r_0 = sintetitza_1(acumula, seq[:-1], neutre)
r = acumula(r_0, seq[-1])
return r
Recursiva lineal amb immersió d’eficiència¶
def sintetitza_2(acumula, seq, neutre):
return sintetitza_2_i(acumula, seq, neutre, range(len(seq)))
def sintetitza_2_i(acumula, seq, neutre, llesca):
if len(llesca) == 0:
r = neutre
else:
r_0 = sintetitza_2_i(acumula, seq, neutre, llesca[:-1])
r = acumula(r_0, seq[llesca[-1]])
return r