Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Olá, Estudante. Como vai?
Seu código ficou excelente e funciona perfeitamente! A implementação da recursividade em Python é um conceito que costuma dar um "nó" na cabeça de quem está começando, mas você demonstrou ter entendido muito bem a estrutura necessária.
A lógica da sua função soma_recursiva está impecável porque ela atende às duas regras fundamentais de qualquer estrutura recursiva:
O trecho if n == 1: return 1 é o seu caso base. Ele é a parte mais importante da função, pois define a condição de parada. Sem ele, a função continuaria chamando a si mesma infinitamente até estourar o limite de memória do Python (Stack Overflow).
No bloco else: return n + soma_recursiva(n - 1), você faz a função chamar a si mesma diminuindo o valor de n a cada passo. Como você testou com o número 7, o Python empilhou as operações da seguinte forma até obter o resultado 28:
O seu código funciona lindamente para números inteiros positivos a partir de 1. No entanto, se um usuário rodar o programa e digitar o número 0 ou um número negativo (como -5), o código vai quebrar em uma repetição infinita, pois o n vai diminuindo para -6, -7, -8 e nunca atingirá o caso base n == 1.
Para tornar o seu algoritmo ainda mais robusto contra entradas inesperadas, uma boa prática é ajustar o teste do caso base para englobar números menores ou iguais a 1:
def soma_recursiva(n):
if n <= 1:
return n
else:
return n + soma_recursiva(n - 1)
Dessa forma, se alguém digitar 0, o programa retorna 0 imediatamente com segurança.
Parabéns pelo domínio dos conceitos de funções e estruturas condicionais no Python. Continue praticando!
Espero que possa ter lhe ajudado!
Ei Evandro, muito obrigada pelo elogio e pela dica!