English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo articolo, imparerai a creare funzioni ricorsive. Una funzione che si chiama a se stessa.
che si chiamaFunzioneChiamata di funzione ricorsiva. E questa tecnica si chiama ricorso. Creando una funzione ricorsiva, è necessario creare condizioni per evitare che la funzione si chiama a se stessa in modo infinito.
func recurse() { //statements recurse() } recurse()
La figura sottostante mostra come avviene il ricorso.
Nel diagramma di flusso sopra, il ricorso è eseguito in modo infinito. In alcuni casi, potrebbe essere necessario creare un ricorso che continua fino a quando non si soddisfano determinate condizioni.
Per prevenire un ricorso infinito, utilizzare chiamate ricorsive nelle istruzioni condizionali Swift, ad esempioif ... else statement。
func countDownToZero(num: Int) { print(num) if num > 0 { countDownToZero(num: num - 1) } } print("Countdown:") countDownToZero(num:3)
当您运行以下程序时,输出将是:
Countdown: 3 2 1 0
Nel programma sopra, l'istruzione print("Countdown:") viene stampata nella console.Countdown:。Questa istruzione chiama la funzione countDownToZero(num:3) con un parametro di tipo Integer.
countDownToZero() esegue le istruzioni all'interno della funzione, se soddisfa la condizione num > 0, countDownToZero() chiama di nuovo la funzione countDownToZero(num: num - 1).
Se non si soddisfa la condizione, non viene eseguita la chiamata di funzione e viene fermato il ricorso.
步骤 | Chiamata di funzione | Stampa | num > 0 ? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Sì |
2 | countDownToZero(2) | 2 | Sì |
3 | countDownToZero(1) | 1 | Sì |
4 | countDownToZero(0) | 0 | No (Fine) |
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)")
当您运行以下程序时,输出将是:
The factorial of 4 is 24
步骤 | 传递的参数 | 返回语句 | 值 |
---|---|---|---|
1 | 4 | return 4 * factorial(of:3) | 4 * factorial(of:3) |
2 | 3 | return 3 * factorial(of:2) | 4 *3 * factorial(of:2) |
3 | 2 | return 2 * factorial(of:1) | 4 * 3 *2 * factorial(of:1) |
4 | 1 | return 1 | 4 * 3 * 2 * 1 |
当可以在大约两个步骤中找到问题的解决方案时,通常将递归用作迭代的替代。