Tutorial del Python - Funzione ricorsiva
- Cos’è la funzione ricorsiva di Python
- Limitazione della ricorsione
- Vantaggio della ricorsione
- Svantaggio della ricorsione
In questa sezione, imparerete la funzione ricorsiva di Python.
Cos’è la funzione ricorsiva di Python
Una funzione ricorsiva è una funzione che chiama se stessa e questo processo è chiamato ricorsione di funzione.
Per esempio, calcoliamo il fattoriale di un numero, per esempio, 6
.
6 * 5 * 4 * 3 * 2 * 1
Nel codice seguente viene creata una funzione ricorsiva che trova il fattoriale di un numero:
def fact(n):
"""Recursive function to find factorial"""
if n == 1:
return 1
else:
return n * fact(n - 1)
a = 6
print("Factorial of", a, "=", fact(a))
Factorial of 6 = 720
La funzione fact(n)
è una funzione ricorsiva. La funzione fact
si chiama con l’argomento n-1
fino a quando il numero diventa 1 ed è così che si calcola il fattoriale, cioè moltiplicando il numero per il fattoriale di uno inferiore al numero.
In questa funzione ricorsiva, c’è una condizione di base che è quando il numero diventa 1
, 1
viene restituito e in questo modo la chiamata ricorsiva diventa finita.
Quando si crea una funzione ricorsiva, ci deve essere una condizione di base per terminare quella chiamata ricorsiva.
Limitazione della ricorsione
Come avete notato, ogni volta che la funzione chiama se stessa, ha bisogno di un po’ di memoria per memorizzare alcuni valori intermedi. Pertanto la funzione ricorsiva consuma molta più memoria di una normale funzione non ricorsiva. Python imposta la limitazione delle chiamate ricorsive a 3000
.
>>> import sys
>>> sys.getrecursionlimit()
3000
Solleva un RecursionError
se la ricorsione supera 3000
.
def fact(n):
"""Recursive function to find factorial"""
if n == 1:
return 1
else:
return n * fact(n - 1)
print(fact(4000))
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
print(factorial(4000))
File "<pyshell#1>", line 5, in factorial
return n * factorial(n-1)
File "<pyshell#1>", line 5, in factorial
return n * factorial(n-1)
File "<pyshell#1>", line 5, in factorial
return n * factorial(n-1)
[Previous line repeated 989 more times]
File "<pyshell#1>", line 2, in factorial
if n == 1:
RecursionError: maximum recursion depth exceeded in comparison
Soluzione per rimuovere la limitazione della ricorsione
È possibile risolvere la limitazione della ricorsione impostando la limitazione della ricorsione su un numero maggiore della ricorsione richiesta.
import sys
sys.setrecursionlimit(5000)
def fact(n):
"""Recursive function to find factorial"""
if n == 1:
return 1
else:
return n * fact(n - 1)
print(fact(4000))
Vantaggio della ricorsione
- Utilizzando funzioni ricorsive, il problema può essere suddiviso in sotto-problemi che possono essere facilmente risolti.
- Il codice diventa ordinato e pulito.
Svantaggio della ricorsione
- A volte è difficile seguire la logica della funzione ricorsiva.
- Per risolvere ogni problema secondario ci vorrà molto tempo, per cui le funzioni ricorsive sono inefficienti.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook