English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este artículo, aprenderás a crear funciones recursivas. Una función que se llama a sí misma.
llamada a sí mismaFunciónSe llama a la función recursiva. Y esta técnica se llama recursión. Al crear una función recursiva, debe crear condiciones para que la función no se llame a sí misma de manera infinita.
func recurse() { //instrucciones recurse() } recurse()
La siguiente imagen muestra la forma de la llamada recursiva.
En el diagrama de flujo anterior, la recursión se ejecuta infinitamente. En ciertos casos, es posible que necesite crear una recursión que se ejecute hasta que se cumplan ciertas condiciones.
Para evitar la recursión infinita, utilice llamadas recursivas en las sentencias condicionales de Swift, por ejemploif ... else instrucción。
func countDownToZero(num: Int) { print(num) if num > 0 { countDownToZero(num: num - 1) } } print("Countdown:") countDownToZero(num:3)
当您运行以下程序时,输出将是:
Countdown: 3 2 1 0
En el programa anterior, la instrucción print("Countdown:") escribe en la consolaCountdown:。Esta instrucción llama a la función countDownToZero con un parámetro de tipo Integer, countDownToZero(num:3) 。
countDownToZero() ejecuta las instrucciones internas de la función, si se cumple la condición num > 0, countDownToZero() llama nuevamente a la función countDownToZero(num: num - 1)。
Si no se cumple la condición, no se realiza la llamada a la función y se detiene la recursión.
步骤 | Llamada a la función | Imprimir | ¿El número es mayor que 0? |
---|---|---|---|
1 | countDownToZero(3) | 3 | 是 |
2 | countDownToZero(2) | 2 | 是 |
3 | countDownToZero(1) | 1 | 是 |
4 | countDownToZero(0) | 0 | 否(结束) |
func factorial(of num: Int) -> Int if num == 1 { 返回 1 } 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 是 24
步骤 | 传递的参数 | 返回语句 | 值 |
---|---|---|---|
1 | 4 | 返回 4 * factorial(of:3) | 4 * factorial(of:3) |
2 | 3 | 返回 3 * factorial(of:2) | 4 *3 * factorial(of:2) |
3 | 2 | 返回 2 * factorial(of:1) | 4 * 3 *2 * factorial(of:1) |
4 | 1 | 返回 1 | 4 * 3 * 2 * 1 |
当问题解决方案可以在大约两个步骤中找到时,通常将递归用作迭代的替代品。