Recursão
Introdução
Recursão é um dos conceitos mais importantes da ciência da computação, e extremamente divertido de se pensar sobre. Basicamente, trata-se de uma função chamando a si mesma. Insano, né? Vamos usar uma analogia com o mundo real para ficar mais claro, imagine um cenário em que você chama seus amigos para sair.

Você liga para a gabs, chama ela para sair, mas ela diz que só vai se a gheysa for, então ela coloca a ligação em espera e liga para a gheysa.
A gheysa fala que só vai se o café for, então ela coloca a ligação em espera e liga para o café.
O café fala que só vai se o normando for, então ele coloca a ligação em espera e liga para o normando.
O normando fala que só vai se o eth for, então ele coloca a ligação em espera e liga para o eth.
O eth aceita ir e então desliga a ligação.
O normando retorna a ligação com o café, aceita e desliga a ligação.
O café retorna a ligação com a gheysa, aceita ir e desliga a ligação.
A gheysa retorna a ligação com a gabs, aceita ir e desliga a ligação.
A gabs retorna a ligação com você, aceita ir e pronto vocês todos vão sair!
Codificando o Conceito
Note que, no nosso exemplo acima, pôr a ligação em espera e chamar outra pessoa é justamente o ato de uma função chamar a si mesma, vamos visualizar isso em código:
def call_for_lunch(person):
if person == 'eth': # BASE CASE
return True
return call_for_lunch(next_person) # RECURSIVE CALL
Nesse exemplo, nós vemos as duas coisas essenciais para compor uma função recursiva:
Uma base call, onde a função retornará algum valor e não chamará a si própria novamente (caso contrário, teríamos um looping infinito)
Uma recursive call, onde a função chama a si mesma caso ela ainda não tenha chegado na base call
Aqui uma clássica função recursiva para calcular o fatorial:
def factorial(n):
if n <= 1: # BASE CASE
return 1
return n * factorial(n - 1) # RECURSIVE CALL
Você pode abrir o pythontutor para ver a stack da recursão se formando e sendo resolvida no código acima.
Recursão e Stack
Como o computador consegue fazer uma função chamar a si mesma? Simples, ele utiliza uma stack nos bastidores para ter uma noção de onde as coisas estão.
A stack interna de um computador é chamada de "call stack", e os dados que são colocados em uma call stack são chamados de stack frames".
fonte: Recursion Review, AlgoMonster.
keywords: recursão, call stack, stack frame
Last updated