Recursivitat¶
Vegeu els conceptes, les referències i els exercicis al tema Recursivitat dins del material de l’assignatura.
Tipus de problemes¶
Fòrmules recursives¶
Definir una funció en Python a partir d’una fòrmula matemàtica recursiva: funció, eqüació, successió, sèrie…
Només cal fer un canvi de llenguatge: de notació matemàtica a Python.
Exemples¶
Funcions que calculen nombres naturals
Funcions que calculen els termes d’una successió
Funcions que generen llistes
Funcions en què les dades són llistes
Algorismes recursius¶
Definir una funció en Python a partir d’un algorisme recursiu.
Cal saber expressar l’algorisme en Python.
Exemples¶
Seqüències¶
L’estratègia més sencilla per reduir una seqüència és calcular-ne una llesca sense un dels elements.
Els elements més fàcils de descartar són el primer i l’últim.
Exemples¶
Aplica
Filtra
Sintetitza
Cerca
Classe seqüència definida per l’usuari: Paquets
Índex del primer element desordenat
Llista ordenada creixentment
Combinacions
Filtra i sintetiza:
mes_no_nuls.nombre_no_nuls()
de Polinomi amb més coeficients no nulsEnumera, filtra i aplica: indexos
Finestres
Funció diferencies de diferencies
Cal definir l’algorisme recursiu
Immersió¶
Tècnica de disseny recursiu.
Imprescindible quan no sabem reduir cap dels paràmetres de la funció original.
Consisteix en definir una nova funció més general (funció immersora), que té més paràmetres.
La funció immersora calcula el mateix resultat que la funció original quan es crida amb alguns valors dels arguments que es corresponen als nous paràmetres.
Immersió d’eficiència en seqüències¶
Evita generar llesques de la llista original.
Afegeix un paràmetre de tipus
range
.Les llesques es fan sobre el nou paràmetre en comptes de la llista.
Vegeu al Python Tutor la solució de l’esquema sintetitza basada en llesques i contrasteu-la amb la solució amb la tècnica d’immersió.
Exemples¶
Immersió d’eficiència en seqüències
Aplica
Filtra
Sintetitza
Màxim:
mes_no_nuls()
de Polinomi amb més coeficients no nuls, amb claunombre_no_nuls()
Mínim: mesCurta
Intèrval i suma: Suma d’un tros
Exercicis d’examen: totvocals.
Solucions: totvocals.
El resultat de la funció és un índex d’una seqüència
Funció
index_llista()
de Cerca dicotòmica
Immersió imprescindible en seqüències sense llesques
Immersió en matrius
Decidir si una matriu és simètrica
Dades recursives¶
Exemples¶
Funcions modificadores¶
També poden ser recursives.
Cal immersió per les funcions modificadores sobre seqüències.
Exemples¶
Funció
positius_2()
Recorregut en profunditat d’una graf
Iteradors¶
Les funcions que reben o calculen iteradors finits poden ser recursives.
Tipus de recursivitat¶
Recursivitat multiple¶
Funció recursiva lineal o simple: per resoldre el cas recursiu, només cal que es cridi un cop a ella mateixa.
Funció recursiva múltiple: per resoldre el cas recursiu, cal cridar-la més d’un cop.
Exemples¶
Funció hi_es
Recursivitat final¶
Funció recursiva lineal final: retorna directament el resultat de la crida recursiva.
Exemples¶
Recursivitat estructural¶
Funcions recursives amb paràmetres o resultats que són dades recursives.
Recursivitat indirecta¶
Funció recursiva directa: la funció es crida a ella mateixa.
Funció recursiva indirecta: la funció no es crida a ella mateixa sinó que ho fa una altra funció a qui ha cridat.