Olá, Marcelo. Como vai?
Excelente implementação! Seu código resolve muito bem o problema da soma recursiva e você teve um ótimo cuidado ao adicionar o tratamento de exceções com try/except para garantir que o programa não quebre caso o usuário digite algo inválido ou um número menor que 1.
Para complementar o seu projeto e agregar ainda mais valor ao seu aprendizado, vale a pena analisarmos dois pontos: um pequeno ajuste na captura da entrada do usuário e uma melhoria na estrutura da própria função recursiva.
Ajuste no Input
No seu bloco de código, a linha n = int(input('Digite um número: ')) já transforma a entrada em um número inteiro imediatamente. Se o usuário digitar uma letra, o programa vai disparar um erro nessa linha, que está fora do bloco try, fazendo com que o programa pare de funcionar antes mesmo de chegar no tratamento que você criou.
O ideal é receber o dado como texto puro no input() e deixar que a conversão para int(n) aconteça exclusivamente dentro do try. Veja como fica mais seguro:
# Recebe apenas como string primeiro
n = input('Digite um número: ')
try:
# A conversão e validação acontecem com segurança aqui dentro
n = int(n)
if n < 1:
raise ValueError
else:
resultado = soma_recursiva(n)
print(f'A soma de 1 a {n} é: {resultado}')
except ValueError:
print('Por favor, insira um número inteiro positivo.')
O Caso Base da Recursão (Boa Prática)
A sua função soma_recursiva funciona perfeitamente para números maiores ou iguais a 1. Na recursividade, o if n == 1: é o que chamamos de caso base (a condição de parada).
Uma boa prática em funções matemáticas recursivas é definir o caso base no menor limite possível, que geralmente é o 0. Se a função parar no 0 retornando 0, ela se torna ainda mais robusta. Veja a diferença sutil:
def soma_recursiva(n):
if n == 0:
return 0
else:
return n + soma_recursiva(n - 1)
Dessa forma, se no futuro as regras do seu sistema mudarem e o número 0 for permitido, a sua função já estará pronta para lidar com ele sem precisar de alterações na lógica principal.
Parabéns pela dedicação e pela estrutura organizada do código!
Espero que possa ter lhe ajudado!