In questo articolo imparerai a creare una funzione ricorsiva; una funzione che chiama se stessa.
Una funzione che chiama se stessa è nota come funzione ricorsiva. E questa tecnica è nota come ricorsione. Durante la creazione di una funzione ricorsiva, è necessario creare una condizione in modo che la funzione non si chiami indefinitamente (infinitamente).
Come funziona la ricorsione in Swift?
func recurse () (// istruzioni recurse ()) recurse ()
La figura seguente mostra come funziona la ricorsione chiamando se stessa più e più volte.
Nel diagramma di flusso sopra, la ricorsione viene eseguita all'infinito. Tuttavia, quasi tutte le volte si crea una ricorsione che viene eseguita fino a quando non viene soddisfatta una condizione.
Per prevenire la ricorsione infinita, usa la chiamata ricorsiva all'interno delle istruzioni condizionali Swift, ad esempio if… else.
Esempio 1: stampa N numeri positivi
func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3)
Quando esegui il seguente programma, l'output sarà:
Conto alla rovescia: 3 2 1 0
Nel programma precedente, l'istruzione print("Countdown:")
restituisce Countdown: nella console. E l'istruzione countDownToZero(num:3)
chiama la funzione che accetta un parametro Integer
.
L'istruzione all'interno della funzione countDownToZero()
viene eseguita e se la condizione num> 0
è soddisfatta, la funzione countDownToZero()
viene chiamata di nuovo come countDownToZero(num: num - 1)
.
Se la condizione non è soddisfatta, la chiamata alla funzione non viene eseguita e la ricorsione si interrompe.
Vediamolo per fasi
Fasi di esecuzionePassi | Chiamata di funzione | Stampato | num> 0? |
---|---|---|---|
1 | countDownToZero(3) | 3 | sì |
2 | countDownToZero(2) | 2 | sì |
3 | countDownToZero(1) | 1 | sì |
4 | countDownToZero(0) | 0 | No (finisce) |
Esempio 2: trova fattoriale di un numero
func factorial(of num: Int) -> Int ( if num == 1 ( return 1 ) else ( return num * factorial(of:num - 1) ) ) let x = 4 let result = factorial(of: x) print("The factorial of (x) is (result)")
Quando esegui il seguente programma, l'output sarà:
Il fattoriale di 4 è 24
Come funziona questo esempio?
Vediamolo per fasi
Fasi di esecuzionePassi | Argomento passato | Dichiarazione di ritorno | Valore |
---|---|---|---|
1 | 4 | return 4 * factorial(of:3) | 4 * fattoriale (di: 3) |
2 | 3 | return 3 * factorial(of:2) | Fattoriale 4 * 3 * (di: 2) |
3 | 2 | return 2 * factorial(of:1) | 4 * 3 * 2 * fattoriale (di: 1) |
4 | 1 | return 1 | 4 * 3 * 2 * 1 |
Di solito la ricorsione viene utilizzata in sostituzione dell'iterazione quando la soluzione a un problema può essere trovata in circa due passaggi. Il primo passaggio cerca una soluzione, se non ripetere il processo.