Gostaria de compreender melhor a recursão.
Não entrou na minha cabeça, ainda, como que as linhas após
executa_remocao mapa, posicao.direita, quantidade
chegam a ser executadas.
Pela lógica, ao acompanharmos a sequência de execução do programa, ele passa pela linha
executa_remocao mapa, posicao.direita, quantidade
quatro vezes e retorna a função remove, não passando pelas funções seguintes. Mas quando vamos ver, na prática, é como se todas as linhas fossem executadas ao mesmo tempo. Ora, porque isso ocorre só aqui e não nas demais funções do programa? Que mágica foi essa que o Guilherme fez?
Seque o código:
def executa_remocao(mapa, posicao, quantidade)
return if mapa[posicao.linha][posicao.coluna] == "X"
posicao.remove_do mapa
remove mapa, posicao, quantidade - 1
end
def remove(mapa, posicao, quantidade)
return if quantidade == 0
executa_remocao mapa, posicao.direita, quantidade
executa_remocao mapa, posicao.esquerda, quantidade
executa_remocao mapa, posicao.cima, quantidade
executa_remocao mapa, posicao.baixo, quantidade
end