
Funções Recursivas no JavaScript
Saiba como usar a técnica de recursão para desenvolver uma função recursiva do JavaScript, que é uma função que chama a si mesma.
English version: https://www.javascripttutorial.net/javascript-recursive-function/
Uma função recursiva é uma função que chama a si mesma até encontrar uma instrução de parar. Essa técnica é chamada de recursão.
Se você nunca viu recursão antes, assista esse vídeo:
Suponha que você tenha uma função chamada recurse()
. Ela será uma função recursiva caso ela mesma se invoque dentro do seu escopo, dessa forma:

Uma função recursiva sempre precisa ter uma condição que vai parar de invocar ela mesma, caso contrário ela se chamará infinitamente.
Portanto, uma função recursiva normalmente se parece com algo assim:

Geralmente, as funções recursivas são usadas para dividir um grande problema em problemas menores.
Você pode descobrir que elas são muito usadas nas estruturas de dados, como árvores binárias, gráficos e algoritmos de pesquisas binárias e classificação rápida.
Exemplos de funções recursivas no JavaScript
Vamos dar alguns exemplos de como usar as funções recursivas.
1) Um exemplo simples de função recursiva
Suponha que você precise desenvolver uma função que faça a contagem regressiva de um número determinado até chegar em 1. Por exemplo, para fazer a contagem regressiva de 3 até 1:

Confira a função countDown()
a seguir:

No momento a função countDown()
exibe apenas o número 3
.
Para fazer a contagem regressiva do número 3 ao 1, você pode fazer assim:
- Mostre o número
3
; - e chame
countDown(2)
que vai mostrar o número2
; - e chame
countDown(1)
que vai mostrar o número1
.
O código a seguir altera a função countDown()
para uma função recursiva:

A chamada countDown(3)
será executada até que o tamanho máximo da pilha de chamadas seja excedido, mostrando um erro assim:

Isso porque a função não tem uma condição para parar de se chamar, tornando a execução em um loop infinito.
A contagem regressiva deveria para até quando o próximo número fosse zero, para isso, adicionamos uma condição if
dessa forma:

Resultado:

Agora a função countDown()
funciona como o esperado.
No entanto, conforme mencionado no tutorial de Tipo Função, o nome da função é uma referência ao objeto de função real.
Se em algum lugar do código, o nome da função for definido como null
, a função recursiva irá parar de funcionar.
Por exemplo, o código a seguir resultará em um erro:

Erro:

Como esse script funciona:
- Primeiro, atribua o nome da função
countDown
à variávelnewYearCountDown
. - Em segundo lugar, defina a referência da função
countDown
comonull
. - Terceiro, chame a função
newYearCountDown
.
O código causa um erro porque o corpo da função countDown()
faz referência ao nome da função countDown
que foi definido como null
no momento da chamada da função.
Para corrigir isso, você pode usar uma expressão de função nomeada da seguinte forma:

2) Calcular a soma dos dígitos de um número
Dado um número qualquer, por exemplo 324
, calcule a soma dos dígitos:
3 + 2 + 4 = 9
Para aplicar a técnica recursiva, você pode usar as seguintes etapas:

Então:

O seguinte código ilustra a função recursiva sumOfDigits()
:

Como isso funciona:
- O
num%10
retorna o resto da divisão denum
por10
, por exemplo:324 / 10 = 32 e resta 4
portanto324 % 10 = 4
- O
Math.floor(num/10)
retorna a parte inteira denum
dividido por10
:324 / 10 = 32,40
portando32
é a parte inteira. - O
if(num==0)
é a condição que interrompe a chamada da função.
Resumo
- Uma função recursiva é uma função que chama a si mesma até que seja interrompida .
- Uma função recursiva sempre tem uma condição que impede a função de chamar a sim mesma em algum momento.
Veja o índice de todos os tutoriais JavaScript
Confira uma série de outros tutoriais JavaScript que eu escrevi, clicando no link abaixo: