English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste artigo, você aprenderá a criar funções recursivas. Uma função que se chama a si mesma.
que se chama a si mesmafunçãoChamada de função recursiva. E essa técnica é chamada de recursão. Quando se cria uma função recursiva, é necessário criar condições para que a função não chame a si mesma indefinidamente.
func recurse() { //instruções recurse() } recurse()
A figura a seguir mostra como são feitas as chamadas recursivas.
No diagrama de fluxo acima, a recursão é executada infinitamente. Em algumas situações, você pode precisar criar uma recursão que continuará a executar até que sejam atendidas certas condições.
Para evitar recursão infinita, use chamadas recursivas dentro das instruções condicionais em Swift, por exemploif ... else instrução。
func countDownToZero(num: Int) { print(num) if num > 0 { countDownToZero(num: num - 1) } } print("Countdown:") countDownToZero(num:3)
Quando você executar o seguinte programa, a saída será:
Countdown: 3 2 1 0
No programa acima, a instrução print("Countdown:") imprime no consoleCountdown:。Esta instrução chama a função countDownToZero com parâmetro do tipo Integer countDownToZero(num:3) 。
countDownToZero() executa as instruções internas da função, se a condição num > 0 for atendida, countDownToZero() será chamada novamente a função countDownToZero(num: num - 1)。
Se não for atendida a condição, a chamada de função não será executada e a recursão será encerrada.
Passo | chamada de função | imprimir | num > 0 ? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Sim |
2 | countDownToZero(2) | 2 | Sim |
3 | countDownToZero(1) | 1 | Sim |
4 | countDownToZero(0) | 0 | Não (Fim) |
func fatorial(de num: Int) -> Int { if num == 1 { return 1 } else { return num * fatorial(de:num - 1) } } let x = 4 let result = fatorial(de: x) print("O fatorial de \(x) é \(result)")
Quando você executar o seguinte programa, a saída será:
O fatorial de 4 é 24
Passo | Parâmetros Passados | Sentença de Retorno | Valor |
---|---|---|---|
1 | 4 | return 4 * fatorial(de:3) | 4 * fatorial(de:3) |
2 | 3 | return 3 * fatorial(de:2) | 4 *3 * fatorial(de:2) |
3 | 2 | return 2 * fatorial(de:1) | 4 * 3 *2 * fatorial(de:1) |
4 | 1 | return 1 | 4 * 3 * 2 * 1 |
Quando a solução do problema pode ser encontrada em aproximadamente dois passos, geralmente a recursão é usada como substituto para a iteração.