Recursão
Recursão é uma técnica de programação em que uma função chama a si mesma para resolver um problema em partes menores. É especialmente útil para problemas com estrutura repetitiva ou subproblemas naturais.
Os principais elementos da recursão são:
Caso base: a condição que interrompe a recursão;
Caso recursivo: a parte em que a função chama a si mesma com uma entrada mais simples.
Por que usar recursão?
Alguns problemas podem ser naturalmente expressos em termos de subproblemas menores. A recursão oferece uma forma clara e elegante de resolvê-los, permitindo que uma função chame a si mesma para lidar com casos mais simples. É comumente utilizada em tarefas como processamento de árvores, exploração de caminhos ou decomposição de estruturas (por exemplo, listas, strings).
def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case # Function call print_message("Hello, Recursion!", 3)
Vamos analisar passo a passo como este programa recursivo funciona:
Verificação da Condição: se
times > 0
, a função continua. Neste caso,times = 3
, então a condição é verdadeira;Impressão da Mensagem: a função imprime
"Hello, Recursion!"
;Chamada Recursiva: a função chama a si mesma com
times - 1
;Repetição: esse processo continua até que
times
seja igual a 0;Finalização: quando a condição
times > 0
não for mais verdadeira, a recursão é encerrada e o programa termina.
Resultado: A mensagem "Hello, Recursion!"
é impressa três vezes.
Compreendendo o fluxo:
Cada vez que a função chama a si mesma, ela adiciona um novo quadro à pilha de chamadas (uma estrutura de memória que acompanha as chamadas de função ativas). A função continua se chamando com um valor de times
menor. Quando atinge o caso base (times == 0
), ela para. Em seguida, cada chamada anterior é finalizada uma a uma em ordem reversa. Esse comportamento de retrocesso é essencial para o funcionamento da recursão.
Swipe to start coding
Dada uma string representando um número de telefone, que pode conter espaços, traços, parênteses ou outros caracteres não numéricos. O objetivo é extrair apenas os dígitos utilizando recursão.
- Se a string de entrada
number
estiver vazia, retornar uma string vazia. - Verificar se o primeiro caractere da string
number
é um dígito utilizando o métodoisdigit()
em uma condiçãoif
. - Se for um dígito, concatenar com o resultado de uma chamada recursiva para
format_phone_number
, passando a substring a partir do segundo caractere. - Se não for um dígito, fazer uma chamada recursiva para
format_phone_number
, ignorando o primeiro caractere.
Solução
Obrigado pelo seu feedback!