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

Praticando Python | 030 | Código | Faça como eu fiz: somando números recursivamente

boa tarde, compartilhando conforme orientação do curso.

# Praticando Python | 030 | Código | Faça como eu fiz: somando números recursivamente

# Paulo está desenvolvendo um programa para calcular valores acumulados em um sistema financeiro. Ele precisa somar os todos os números inteiros de 1 até n, onde n é um valor escolhido pelo usuário.
# Ajude Paulo criando uma função recursiva que receba um número n e retorne a soma de todos os números inteiros de 1 até N.
# Entrada: Digite um número: 5
# Saida: A soma de 1 a 5 é: 15

# ===================================================================================== #
# ENTRADA | Funções auxiliares para leitura                                             #
# ===================================================================================== #

'''Função | Ler um número inteiro'''
def ler_int(msg: str) -> int:
    while True:
        entrada = input(msg).strip()
        try:
            valor = int(entrada)
            return valor
        except ValueError:
            print("Entrada inválida. Digite um número inteiro (ex.: 5).")

# ===================================================================================== #
# PROCESSAMENTO | Funções de cálculo                                                    #
# ===================================================================================== #

'''Função | Somar recursivamente os inteiros de 1 até n.'''
def soma_ate_n_recursivo(n: int) -> int:
    # Parada da recursão
    if n == 0:
        return 0

    # Passo recursivo (reduz o problema): soma atual + soma do menor subproblema
    return n + soma_ate_n_recursivo(n - 1)
#    Regras:
#    - Se n < 0  -> Não tem sentido somar até negativos.
#    - Se n == 0 -> Soma 0 ponto de parada da recursão.
#    - Passo recursivo: n + soma_ate_n_recursivo(n - 1)

# Soma de 1 até n usando laço (for).
def soma_ate_n_iterativo(n: int) -> int:
    total = 0
    for i in range(1, n + 1):
        total += i
    return total

'''Função | Matemática -> n * (n + 1) / 2'''
def soma_ate_n_formula(n: int) -> int:
    return n * (n + 1) // 2  # // para garantir inteiro

# ===================================================================================== #
# SAÍDA | Executar e Mostrar o Resultado                                                #
# ===================================================================================== #

if __name__ == "__main__":
    print("=== Somando números de 1 até n (Recursão) ===\n")

    # ENTRADA
    n = ler_int("Digite um número: ")

    # Validação de negócio
    while n < 0:
        print("Erro: o número deve ser zero ou positivo (n >= 0).")
        n = ler_int("Digite um número: ")

    # PROCESSAMENTO
    resultado = soma_ate_n_recursivo(n)

    # SAÍDA
    print(f"\nA soma de 1 a {n} é: {resultado}")
2 respostas
solução!

Ei! Tudo bem?

Muito boa a sua solução! Você aplicou corretamente a recursão, definiu bem o caso base e organizou o código de forma clara e legível. A validação de entrada e a separação entre entrada, processamento e saída mostram um cuidado extra com boas práticas.

Parabéns pelo trabalho, continue nesse ritmo e qualquer dúvida compartilhe no fórum.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Muito obrigado.