Disseny de funcions recursives¶
Definició
Una funció recursiva és aquella que es crida a si mateixa.
Si ho fes sempre, entraria en un bucle infinit; per tant, per a què s’acabi li cal una condició de parada, és a dir, un cas base en què no es crida a si mateixa (o més d’un cas base). Per tal que estigui ben definida, cal garantir que sempre acabarà arribant a algun cas base (o trivial).
Esquema típic de funcions recursives:
def funcio(params):
if ... : # cas base (o trivial)
...
return ...
else: # cas recursiu (no base)
...
v = funcio(nous_params)
...
return ...
def funcio(params):
if ... : # cas base
...
else: # cas recursiu
...
funcio(nous_params)
...
Atenció
Notem que els paràmetres a cada crida recursiva han de canviar (potser no tots), ja que altrament la funció mai no arribaria al cas base.
De vegades, una funció recursiva no es crida a si mateixa directament, sinó indirectament (A crida a B, B crida A, la qual crida B, la qual crida a A, …).
La potència de càlcul mitjançant funcions recursives és la mateixa que amb les iteracions (for i while), és a dir, tot el que es pot calcular amb iteracions es pot calcular recursivament; i a la inversa.
Exemples: Vegeu el fitxer recursivitat.py
Atenció
En Python hi ha un límit en el nombre màxim de crides recursives que es poden fer; si se’n fan més, es provoca l’error RecursionError
.