Recursão em Ruby. Estou fazendo isso corretamente? - rubi

Eu estou apenas aprendendo Ruby e programação em geral.Eu estou trabalhando em um programa de blackjack como meu primeiro projeto. Eu tenho um método start_game que é chamado para iniciar cada nova mão. O método é chamado e, em seguida, chama-se novamente quando a mão acabou. É a maneira correta de fazer isso? "Isso me parece que alocaria infinitamente a memória toda vez que o método é chamado. Não tenho certeza se isso é algo que a coleta de lixo manipulará ou não." Eu sinto que há provavelmente uma maneira melhor de fazer isso, mas não consigo descobrir. Desde já, obrigado!

Respostas:

1 para resposta № 1

Chamar um método de forma recursiva como esse acabará fazendo com que a pilha transbordasse (se mãos suficientes forem jogadas, não tenho certeza de como isso é provável).

A menos que isso seja, a otimização de chamada impede que isso aconteça. Esta é uma forma de otimização que pode ser aplicada a chamadas de método recursivo onde a chamada recursiva é sempre a última coisa a ser chamada em qualquer execução através do método. Isso basicamente converte a chamada recursiva em um loop, para que você não acabe adicionando à pilha toda vez.

No entanto, de acordo com este questão você não pode confiar na otimização do tail-call em Ruby. Então eu iria reescrever seu código um pouco start_game é chamado em um loop que testa alguma condição para decidir se deve continuar.


Cardápio