Exercícios Resolvidos de Recursão

Ver Teoria

Enunciado

Escreva uma função recursiva que seja capaz de intercalar os algarismos de dois números inteiros recebidos como parâmetros. Essa função deve retornar uma string contendo os algarismos intercalados. Quando os algarismos de um número terminarem, os demais algarismos do número que não finalizou devem ocupar as primeiras posições da string resultante.

Exemplo:

n1: 236 n2: 13458

string resultante: '13243568'

Passo 1

Fala aí, doido! Cara, tenho que te contar que essas questões de recursão, depois que você pega o jeito, são bem repetitivas. Então o macete é fazer bastante exercício, jae?! Depois que pega o jeito fica tranquilo! Então vem comigo!

Bora começar falando da estrutura que nossa função vai ter. Os dados externos que nossa função vai receber são n1 e n2, de acordo com o enunciado. Então esses vão ser nossos parâmetros. E o nome a gente mesmo escolhe, e eu vou escolher “intercala”.

Beleza! Vamos dar uma olhadinha no exemplo de resultado que o enunciado deu.

Até intercalei as cores pra tu reparar que, de trás pra frente, o que tá acontecendo é foi concatenando o último dígito de n1 com o último de n2 até um deles acabar, sacou? Olha…

Assim fica mais fácil de enxergar! Com exceção dos dois primeiros, os outros são o último dígito de n1 com o último dígito de n2. Depois penúltimos, depois ante penúltimos, etc. Bora tentar fazer essa proeza em Python.

Passo 2

Se liga, a primeira coisa que a gente tem que verificar é se os números n1 e n2 são diferentes de 0, né? Levando em consideração que a gente vai cortando o último dígito a cada chamada recursiva, quando um deles acabar, então podemos acabar a recursão. Então vamos começar com o caso base!

Então, se os dois números, n1 e n2, ainda existirem, a gente vai fazendo aquela parada que a gente observou! Concatenando o último dígito de cada um deles. Pra pegar o último dígito de um número, a gente só precisa calcular o resto da divisão por 10 (%10). E pra concatenar, usamos a função str().

Mas ainda não é só isso nessa linha. Essa função retornaria apenas o 68 do exemplo do enunciado. A ideia é a gente concatenar a chamada recursiva na frente desses dígitos, aí o resultado vai intercalar todos os dígitos, e não só os dois últimos. Se liga:

Viu? Olha de novo o exemplo:

Levando em consideração que o primeiro a ser calculado vai ser o 68, depois a gente concatena o 35 na frente usando a função intercala de novo, sem os últimos dígitos (já que tiramos usando o //10), e assim por diante… Agora, só falta a gente lidar com o caso onde um dos dois números acaba.

Passo 3

Mano, quando um dos dois números acaba, a gente só precisa concatenar com o outro todo. Pra fazer isso de forma fácil, vamos usar um truquezinho malandro. Saca só!

Quando um dos números n1 ou n2 acabar, esse número vai ser igual a zero. A gente não precisa saber qual deles acabou primeiro, porque basta a gente somar n1+n2 e o resultado vai ser idêntico ao número restante, já que somar com 0 não vai mudar em nada.

Só que isso ainda não vai funcionar! Isso porque a função tá retornando string no primeiro return, mas no segundo tá retornando um número inteiro. A gente precisa fazer com que todos os casos retornem string. Pra isso, a gente também precisa usar str() no segundo return.

E pronto! Agora a função tá funcionando! Bora testar??

Passo 4

Pra gente testar, bora usar os mesmos dados do enunciado e ver se a resposta sai igual também!

Quando eu executo esse programa, o resultado é esse:

Exatamente igual ao do enunciado! Ufa! Parece que funcionou hahhaha. Te vejo no próximo, capitão!

Resposta