1
resposta

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.

Exemplo de entrada:

Digite um número: 5 
numero = int(input("Digite um número inteiro positivo: "))
resultado = n * (n + 1) // 2
print(f'A soma de 1 até {n} é {resultado}.')

Digite um número inteiro positivo: 999
A soma de 1 até 999 é 499500.
1 resposta

Olá, Andressa. Como vai?

O seu código utilizando a fórmula matemática da Soma de Gauss ($n \times (n + 1) // 2$) ficou excelente, super limpo e incrivelmente rápido! Do ponto de vista de performance e engenharia de software, a sua solução é a melhor possível para o mundo real, pois ela calcula o resultado em tempo constante (complexidade $O(1)$), sem precisar fazer o computador repetir cálculos.

Contudo, se olharmos para o enunciado do exercício e o nome da atividade ("somando números recursivamente"), o objetivo do capítulo é fazer com que você pratique a Recursividade na programação.

Analisando o script que você compartilhou, houve um pequeno detalhe: o código usou uma abordagem matemática direta e acabou esquecendo de construir a função recursiva solicitada. Além disso, notei que no seu input você guardou o valor na variável numero, mas no cálculo utilizou a letra n, o que geraria um erro de NameError ("name 'n' is not defined") se rodasse o script no terminal.

Para te ajudar a dominar esse conceito e entregar o desafio exatamente como o exercício pediu, vamos entender o que é a recursividade e como construir essa função.


O que é Recursividade?

Na programação, a recursividade acontece quando uma função chama a si mesma dentro do seu próprio bloco de código para resolver subproblemas menores.

Para que uma função recursiva não fique rodando para sempre e trave o computador (gerando o erro de Stack Overflow), ela precisa obrigatoriamente de duas partes:

  1. Caso Base (Condição de Parada): A situação mais simples possível, onde a função para de se chamar e retorna um valor fixo. No nosso caso, quando $n = 1$, a soma de 1 até 1 é o próprio $1$.
  2. Caso Recursivo: Onde a função faz a mágica de chamar a si mesma diminuindo o problema. Para somar de 1 até 5, nós pegamos o $5$ e somamos com o resultado da função para o $4$ ($5 + \text{soma}(4)$).

Resolução com Função Recursiva em Python

Veja como fica a estrutura correta para resolver o problema do Paulo utilizando a lógica recursiva e corrigindo o nome das variáveis:

# 1. Criação da função recursiva
def somar_recursivo(n):
    # Caso Base: se n for 1, a resposta é o próprio 1
    if n == 1:
        return 1
    # Caso Recursivo: n + a soma do número anterior
    else:
        return n + somar_recursivo(n - 1)

# 2. Captura do dado do usuário
numero = int(input("Digite um número inteiro positivo: "))

# 3. Validação básica e chamada da função
if numero > 0:
    resultado = somar_recursivo(numero)
    print(f"A soma de 1 até {numero} é {resultado}.")
else:
    print("Por favor, digite um número maior que zero.")

Como o Python processa isso na memória?

Se o usuário digitar 4, o Python vai abrindo "caixas" de cálculo na memória (chamadas de pilha de execução):

  • 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 Caso Base e devolve 1.

Agora o Python volta fechando as caixas de baixo para cima fazendo as somas: $1 + 2 = 3 \rightarrow 3 + 3 = 6 \rightarrow 6 + 4 = 10$. O programa encerra e exibe o resultado final: 10.

Dominar a recursividade é um passo gigante na jornada de qualquer programador, pois essa lógica é a base para entender estruturas de dados mais complexas no futuro, como árvores e grafos.

Parabéns pela postagem e por trazer um exemplo perfeito da fórmula de Gauss para o fórum!

Espero que possa ter lhe ajudado!