Exercícios Resolvidos de Recursão

Ver Teoria

Enunciado

Considere uma função tal que

Escreva uma função, chamada collatz, que recebe um número natural n e retorna o número de vezes que a função f deve ser aplicada, recursivamente, até atingir o número 1. Além disso, a função deve exibir todos os valores de x da sequência. Ex: ao chamar a função com o parâmetro 5, é retornado 5 e exibido

Passo 1

E aí, maninho! Nessa questão, o enunciado descreve como deve ser nossa função. Até o nome da função foi ditado! Bora obedecer solenemente e criar o cabeçalho da função conforme as ordens do professor...

Pronto! Criamos a função e o parâmetro com os mesmos nomes que foram ditos no enunciado. Agora só falta o resto.

Mas, se liga que além disso, o enunciado também deu spoiler de qual vai ser nosso caso base. Nossa recursão tem que parar quando n for igual a 1, certo? Então a gente já sabe que nosso caso base é esse. E também, nossa função tá contando quantas vezes ela mesma foi chamada. Quando n for igual a 1, é pra parar de contar. Então a gente retorna 0!

Pronto! Agora sim, só falta o resto.

Passo 2

Bom, se o número não for igual a 1, a gente precisa aplicar a função f(x) que tá escrita no enunciado. Mas ela depende da paridade do número n! Se n for par temos que fazer uma coisa, e se for ímpar, outra. Pra isso a gente vai ter que usar outro if. Mas, calma, como a gente pode checar se um número é par ou não?

Pô, se um número for par e a gente dividir por 2, não vai sobrar nada. Mas se for ímpar, vai sobrar 1. A gente pode usar isso a nosso favor. Vamos usar o operador de resto de divisão inteira (%)!

É claro que você não precisa, de forma alguma, fazer exatamente igual a mim. Existem várias formas de pensar sobre cada uma das decisões que eu tomo aqui na hora de resolver o exercício, ok?! Show! Agora, no enunciado tá mandando a gente contar quantas vezes vamos chamar a função. Então, bora retornar 1 + a chamada recursiva.

Repara que eu chamo a função recursiva com os parâmetros que foram dados no enunciado. No fim, essa função vai retornar quantas vezes a função foi chamada até n se tornar 1. Vamo testar!

No enunciado diz que, quando chamamos com o parâmetro 5, a função tem que retornar 5. Vamos executar pra conferir.

Retornou mesmo! Então, até aqui tá funcionando de boas. Mas ainda precisamos fazer a função exibir todos os itens da sequência, igual tá no enunciado.

Passo 3

Cara! A cada elemento da sequência de chamadas de funções é recebido como parâmetro n da função. Então, a gente só precisa, antes de tudo, dar um print() no n.

Se liga só!

A gente tá exibindo o n antes de qualquer coisa. Agora, se a gente fizer o mesmo teste que a gente fez antes, o resultado vai ser esse:

Parece que tem um 5 a mais no fim, mas tá certo. A função collatz só exibiu até o 1, assim como o enunciado diz. O último 5 foi exibido pelo nosso print() que tá fora da função. A gente usou ele pra testar só!

Por isso, a gente já acabou nossa questão. Finalizamos o exercícioooo!

Resposta