Como um método Java recursivo pode ser memorizado?
Então, eu construí este programa para construir diferentes estojos de escadas. Essencialmente, o problema é: Dado um número inteiro N, quantas maneiras diferentes você pode construir a escada? N é garantido que é maior que 3 e menor que 200. Qualquer etapa anterior não pode ser maior que a etapa seguinte, caso contrário, ela derrota o objetivo da escada.
Então, dado N = 3 Você pode construir uma escada: 2 etapas e depois 1 etapa depois
Dado N = 4 Você pode construir uma escada: 3 etapas e depois 1 etapa a seguir.
Dado N = 5 Você pode construir duas escadas: 3 degraus e 2 degraus OU 4 degraus e depois 1 degrau.
Meu método está abaixo e funciona, exceto que o tempo de execução é muito lento. Então, eu estava pensando em tentar fazer uma memorização para o método, mas, para ser sincero, não entendo completamente como implementar isso. Se eu pudesse obter alguma ajuda sobre como fazer isso, seria ótimo.
public static void main(String [] args)
{
System.out.println(answer(200));
}
public static int answer(int n) {
return bricks(1,n) -1;
}
public static int bricks(int height, int bricksLeft)
{
if(bricksLeft == 0)
{
return 1;
}
else if(bricksLeft < height)
{
return 0;
}
else
{
return bricks(height +1, bricksLeft - height) + bricks(height +1, bricksLeft);
}
}