Como evitar StackOverflowError para uma função recursiva

Eu estou escrevendo uma função que vai se chamar até cerca de 5000 vezes. Claro, eu recebo umStackOverflowError. Existe alguma maneira que eu possa reescrever este código de uma forma bastante simples ?:

<code>void checkBlocks(Block b, int amm) {

    //Stuff that might issue a return call

    Block blockDown = (Block) b.getRelative(BlockFace.DOWN);
    if (condition) 
        checkBlocks(blockDown, amm);


    Block blockUp = (Block) b.getRelative(BlockFace.UP);
    if (condition) 
        checkBlocks(blockUp, amm);

    //Same code 4 more times for each side

}
</code>

A propósito, qual é a limitação de quão profundas podemos chamar as funções?

questionAnswers(5)

yourAnswerToTheQuestion