Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Faça como eu fiz: somando números recursivamente

def soma_recursiva(n):
    if n == 1:
        return 1
    else:
        return n + soma_recursiva(n - 1)

n = int(input('Digite um número: '))

try:
  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.')
  
2 respostas
solução!

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!

Verdade, esqueci de levar para dentro do try. Obrigado pelo feedback. Sobre a condição zero, Concordo, mas estamos tratando o erro e só aceitamos de 1 pra cima. Valeu demais o feedback