Cómo evitar StackOverflowError para una función recursiva

Estoy escribiendo una función que se llamará hasta 5000 veces. Por supuesto, me sale unStackOverflowError. ¿Hay alguna manera de que pueda reescribir este código de una manera bastante simple ?:

<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>

Por cierto, ¿cuál es la limitación de cuán profundas podemos llamar a las funciones?

Respuestas a la pregunta(6)

Su respuesta a la pregunta