Olá, Alex. Como vai?
Alcançar o arquivo Alura ex038.py já é um feito fantástico, mas implementar o que você fez neste script mostra que você deu um passo gigantesco na sua maturidade como programador. Você dominou um dos conceitos mais abstratos, intrigantes e complexos da engenharia de software: a Recursividade.
A estrutura da sua função somar_recursivo ficou simplesmente perfeita. Você mapeou com extrema precisão as duas partes obrigatórias que dão vida a uma função recursiva:
if n == 1: return 1. Essa é a condição de parada. Sem ela, a função entraria em um looping infinito, chamando a si mesma até travar o computador.return n + somar_recursivo(n - 1). Aqui acontece a mágica onde a função resolve uma parte do problema e delega o resto para uma nova chamada simplificada de si mesma.O teste no terminal com o número 100 resultando em 5050 comprova que a matemática e a lógica do empilhamento de funções rodaram com precisão impecável!
Para fixar de vez esse conceito e enriquecer o seu arsenal técnico, quero compartilhar uma visão visual de como o Python gerencia isso na memória dos bastidores, além de um truque matemático histórico:
Quando você digita o número 4, por exemplo, o Python não faz o cálculo de uma vez. Ele começa a abrir "funções dentro de funções", criando uma estrutura de dados na memória chamada Pilha (Call Stack). O processo acontece exatamente assim:
somar_recursivo(4) devolve 4 + somar_recursivo(3)somar_recursivo(3) devolve 3 + somar_recursivo(2)somar_recursivo(2) devolve 2 + somar_recursivo(1)somar_recursivo(1) atinge o seu Caso Base e devolve 1.Agora que o Python chegou ao fim, a pilha começa a desempilhar e resolver as equações de baixo para cima:
2 + 1 = 33 + 3 = 64 + 6 = 10 (Resultado final enviado para a tela).O seu código recursivo é lindo e semanticamente perfeito para exercitar a lógica. Contudo, em sistemas de produção que lidam com volumes gigantescos de dados, a recursividade no Python tem um limite físico. Se você tentasse digitar um número muito alto, como 2000, o programa quebraria lançando um erro chamado RecursionError (estouro de pilha), porque o Python limita o número de funções abertas simultaneamente para proteger a memória do computador.
Existe uma fórmula matemática famosíssima para resolver esse exato problema (somar os números de 1 até $N$) em uma única linha de código, sem precisar abrir nenhuma função extra ou fazer laços de repetição. Ela foi descoberta pelo matemático Carl Friedrich Gauss quando ele era apenas uma criança na escola:
Soma = n * (n + 1) / 2
Se traduzirmos o segredo de Gauss para o Python, o cálculo de 1 a 100 aconteceria de forma instantânea na memória, sem esforço nenhum de processamento:
def somar_direto(n):
return int((n * (n + 1)) / 2)
(Se jogarmos o seu número 100 na fórmula: $100 \times 101 = 10100$. Dividido por 2, resulta nos mesmos 5050 que o seu terminal exibiu!).
Parabéns, Alex! Escrever uma função recursiva com comentários tão cirúrgicos e precisos é a prova definitiva do nível profissional que você está alcançando ao longo desses 38 exercícios. Continue firme nessa jornada espetacular!
Espero que possa ter lhe ajudado!