Cyber Monday

ATÉ 40% OFF

TÁ ACABANDO!

0 dias

0 horas

0 min

0 seg

1
resposta

[Dúvida] Uso do Return e Funções Recursivas

No último exercício do módulo de Python: Funções, foi feito esse exercício:

def soma(n):
    if n == 1:
        return 1
    return n + soma(n - 1)
numero = int(input('Digite um número: '))
print(f'A soma de 1 a {numero} = {soma(numero)}')

Só que ainda me atrapalho quanto ao uso do return e à lógica por trás dessa função recursiva.
Primeiro, como o return funciona? Por que em alguns casos se utiliza (como no caso acima), mas em outras funções o return nem aparece? Quando aplicar ou não?

Segundo, como funciona essa função acima? Ela soma todos os números de 1 até o número que o usuário definir. Eu entendo essa lógica funcionado utilizando um loop, onde a máquina vai iterar por cada valor entre 1 e n e ir somando. Mas, nesse caso, ele não está passando por cada valor entre 1 e n, ele faz o cálculo uma vez só e dá o resultado? Apenas essa lógica de funcionamento desse modelo de função que está me gerando dúvidas.

1 resposta

Olá Gabriel.
Tudo bem?
O return em Python serve para retornar um valor de uma função para o código que chamou essa função.
Isso significa que quando você usa return, você está "saindo" da função e devolvendo um valor para quem a chamou.
O return também pode ser visto como a maneira de a função comunicar o resultado de seu processamento para o restante do programa.
Quando você não usa return, a função executa o código dentro dela, mas não retorna nenhum valor explicitamente.
Por padrão, funções que não têm return retornam None.
Em algumas funções, o return pode não ser necessário, como em funções que têm efeitos colaterais (como imprimir algo na tela ou modificar algo no estado global), mas quando você precisa de um valor de resultado que vai ser usado fora da função, aí o return se torna necessário.
No caso da função soma(n), o return dentro dela é o que permite que a função recursiva "retorne" a soma de todos os números até o valor de n.
A função funciona da seguinte maneira:

  1. Ela verifica se n é igual a 1. Se for, o return 1 encerra a função e retorna o valor 1.
  2. Se n não for igual a 1, a função chama a si mesma (recursão) com n - 1 e adiciona o valor de n ao que foi retornado pela chamada recursiva anterior.

A ideia por trás da recursão é que a função vai continuar se chamando até atingir o caso base (n == 1). Quando ela chega nesse ponto, ela começa a "voltar", ou seja, cada chamada recursiva vai sendo resolvida e o valor de n é somado à chamada anterior.

Por exemplo, se o usuário digitar 3:

  • soma(3) chama soma(2), que chama soma(1).
  • soma(1) retorna 1.
  • Agora, soma(2) é igual a 2 + 1 (o valor retornado de soma(1)), que dá 3.
  • E finalmente, soma(3) é igual a 3 + 3 (o valor retornado de soma(2)), que dá 6.

Esse processo é a recursão em ação, onde cada chamada recursiva espera que as chamadas anteriores sejam resolvidas para então fazer a soma.
Então, ao contrário de um loop, onde a máquina vai iterar explicitamente de 1 até n, na recursão a máquina "espera" que cada chamada anterior seja resolvida para então retornar o resultado final.
A diferença é que na recursão a execução é dividida em várias chamadas de funções, cada uma esperando o retorno da próxima.
Avise alguma duvida.
Bons estudos.