Recursão

De volta a mais um artigo. Desta vez falarei um pouco sobre recursão.
Conforme venho explicando nos últimos artigos, estes que escrevo fazem parte da minha leitura do livro a abaixo.

Pelo que eu li, eu poderia dizer que o autor se esforçou para produzir uma obra bem didática. Suas explicações são muito boas e ele usa bastante de figuras para embasar seus exemplos. Neste livro ele não aborda todos os algoritmos, mas mesmo assim apresenta os principais como meio de te introduzir neste conhecimento.
Se você já mexe com programação a algum tempo, se já chegou a desenvolver vários scripts, sistemas pequenos ou similares. Eu lhe aconselharia a compra desta obra caso você se interesse por isso. E caso você realmente deseja comprar eu deixarei abaixo o meu link de afiado da amazon para a compra deste livro logo abaixo.
Mas bem, vamos ao que interessa!
O que é recursão?
Bem, de cara eu já posso lhe dizer que toda vez que você faz uso de uma chamada de uma função chamando a ela mesma, você está fazendo uma chamada recursiva.
Mas antes de explicar mais sobre recursão, você precisa entender bem sobre o conceito de uma função, sobre como declara-la e usá-la. Se você já sabe como usar uma função, eu sugiro que você pule está parte.
Entendendo um pouco sobre funções
Se você ainda não está familiarizado com o termo “declaração de uma função”, vamos tomar como exemplo ama simples função na matemática.
Em algum momento durante seu período escolar, você já teve tido alguma matéria em matemática onde o professor te explicou sobre a seguinte expressão:
f(x) = 3x+2
Se você se lembra de como resolver isso, você não terá problemas para entender sobre como declarar uma função em programação.
Mas se não se lembra, deixe-me te explicar. O valor de x em f(x) é um número arbitrário que você deve passar para a função. E a definição após o sinal de igual, define a lei da função onde se o nosso x valer 2, o resultado final da expressão seria f(x) = 3*2+2 que resultaria em f(x) = 8.
Em programação a declaração de uma função é bem semelhante ao conceito de função em matemática. Na programação a declaração de uma função em javascript, seria algo como isso:
function somar(numero) { return numero+2; } console.log(somar(18)); //resposta 20
O número que é o valor de entrada nesta função é como se fosse o x do f(x) em matemática. Em programação, chamamos este valor de parâmetro.
Este parâmetro é usado internamente na função para executar o que for necessário. Neste caso estamos somando 2 a ele para produzir um resultado final.
Outra coisa importante sobre os parâmetros, são a quantidade de parâmetros que podem ser passadas para a função. Eu nem sei se em matemática isso é possível, mas se fossemos tomar como exemplo a mesma função matemática, o uso de 2 ou mais parâmetros seria algo parecido com isso:
f(x, y, z) = (3+x) * y – (10+z)
Ou seja, se na primira função f(x) nós só tinhamos o x como parâmetro de entrada, neste exemplo agora, nós temos 3 parãmetros de entrada que são o x, y e z. Este mesmo exemplo pode ser aplicado em programação.
Veja o código abaixo em javascript:
function calcular(numero1, numero2, numero3) { return (3+numero1) * numero2 - (10 + numero3); } console.log(calcular(4,10,2)); //resposta 58
Observe que ao invés de usar x, y e z eu preferi usar os nomes numero1, numero2 e numero3. Saiba que estes nomes são escolhidos arbitrariamente. É você que define quais nomes dar. poderia ser x, y e z ou qualquer outros nomes.
O return indica que a função deve retornar o resultado daquele calculo. E quando chamamos a função calcular(4,10,2) passando seus devidos valores, obtemos o resultado 58.
Bem, dito a básico do básico sobre funções, vamos voltar ao assunto.
Entendendo uma recursão
Conforme dito antes, sempre que você chamar a mesma função dentro dela mesma, você estará fazendo uso de uma chamada recursiva.
Observe a seguinte função em javascript abaixo e se atente aos comentários.
//Está função mostra na tela uma lista //de números em contagem regressiva function showNumber(number) { //number é o parâmetro de entrada //visible_number é uma variável que //recebe o valor de number -1 para fazer o decremento let visible_number = number -1; console.log(visible_number); //condição de parada if (visible_number == 1) { return 0; } //chamada recursiva //ou seja, chamamos a própria função showNumber(visible_number); } showNumber(4); //resultado 4 3 2 1
Aqui você pode ver que o nome da função é showNumber e esta função aceita como parâmetro apenas um único número. Este número deverá ser decrementado até chegar no múmero um.
A grande sacada que caracteriza este script como um script recursivo é a sua auto invocação dentro dele mesmo. Pois após diminuirmos o número passado por parâmetro em 1 e atribuirmos ele a variável visible_number, nós fazemos novamente a chamada da função showNumber(visible_number); mas desta vez, passando como parâmetro de entrada a variável visible_number que já teve o seu valor reduzido em 1. Então o processo acontece novamente e novamente até que a condição de parada seja satisfeito.
Neste caso a condição de parada acontece neste verificação abaixo
if (visible_number == 1) { return 0; }
A condição de parada é algo super importante em chamadas recursivas, pois sem elas podemos correr o risco de deixarmos a nossa função executando num loop eterno. Uma vez que a função chame a si mesmo, você deve obrigatóriamente definir uma condição de parada para que essa auto chamada chegue a um fim.
Bem galera, por hoje é isso aí e até o próximo artigo!