Aula 24: Funções Aninhadas e Recursão

Aprofundando no poder das funções.

O Que Você Vai Aprender

Nesta aula de 1 hora, você expandirá seu conhecimento sobre funções, explorando conceitos mais avançados, mas fundamentais. Entenderá como uma função pode ser definida dentro de outra e mergulhará no fascinante conceito de recursão, onde uma função resolve um problema chamando a si mesma.

nested Entender Funções Aninhadas

Compreender a definição e o escopo de funções dentro de outras funções.

🔄 Introdução à Recursão

Aprender o conceito de uma função que chama a si mesma para resolver um problema.

Funções Aninhadas: Funções Dentro de Funções

Em Python, você pode definir uma função dentro de outra. A função interna (aninhada) só é visível e pode ser chamada de dentro da função externa. Isso é útil para organizar o código e, em cenários mais avançados, para criar conceitos como "closures" e "decorators".

Exemplo Simples

def externa():
    print("Estou na função externa.")

    def interna(): # Função aninhada
        print("Estou na função interna.")
    
    interna() # Chamando a função interna de dentro da externa

externa()
# interna() # Isso geraria um NameError, pois 'interna' não está no escopo global

A função `interna()` só existe e pode ser invocada dentro do corpo da `externa()`.

Simulador: Funções Aninhadas

Clique no botão para executar a função externa e observar a sequência de chamadas.

Recursão: Uma Função Chamando a Si Mesma

Recursão é uma técnica de programação onde uma função chama a si mesma para resolver um problema. É como resolver um grande problema quebrando-o em versões menores e idênticas de si mesmo, até chegar a um caso simples que pode ser resolvido diretamente.

Componentes Essenciais da Recursão

  • Caso Base: Uma condição que para a recursão, evitando um loop infinito. Sem um caso base, a função chamaria a si mesma indefinidamente.
  • Passo Recursivo: A parte onde a função chama a si mesma, geralmente com um problema menor que se aproxima do caso base.

Exemplo Clássico: Cálculo de Fatorial

def fatorial(n):
    # Caso base: fatorial de 0 ou 1 é 1
    if n == 0 or n == 1:
        return 1
    # Passo recursivo: n * fatorial(n-1)
    else:
        return n * fatorial(n - 1)

print(fatorial(5)) # Calcula 5 * 4 * 3 * 2 * 1 = 120

Simulador: Calculadora de Fatorial Recursiva

Insira um número inteiro não negativo e veja o cálculo do fatorial de forma recursiva.

Desafios para Continuar

Agora que você foi introduzido a funções aninhadas e recursão, é hora de praticar! Resolva estes problemas no seu ambiente de desenvolvimento Python para solidificar seu aprendizado.

  • Análise do Fluxo de `fatorial(3)`

    Discuta ou descreva o fluxo de execução da função `fatorial(3)`. Quais chamadas são feitas? Qual o valor de `n` em cada chamada? Qual o caso base? E os retornos?

  • Contagem Regressiva Recursiva

    Crie uma função recursiva para realizar uma contagem regressiva a partir de um número `n` (passado como parâmetro) até 0. A função deve imprimir cada número na contagem.

    Simulador: Contagem Regressiva Recursiva