Eight Queens Recursive
I think the place where recursion is least appropriate is when you advance a queen until it is safe from all queens with a lower index (i.e. the last line of the method placeQueen(Queen[], int)). This doesn't really seem like a recursive process to me, but rather like something that calls for a loop.

private static void placeQueen(Queen[] queens, int index) {
    while (!queens[index].isSafe(queens) &amp;&amp; queens[index].canAdvance()) {
        queens[index].advance();
    }

    if (!queens[index].canAdvance()
            &amp;&amp; (!queens[index].isSafe(queens)
            || index != 7)) {
        while (index &gt; 0 &amp;&amp; !queens[index].canAdvance()) {
            --index;
        }
        queens[index].advance();
        placeQueen(queens, index);
    } else if (index != 7) {

        // next queen is set to position of current queen
        queens[index + 1].matchPosition(queens[index]);
        ++index;
        placeQueen(queens, index);
    }
}


This advances a queen until it is either safe or can no longer be advanced, which is basically what your code did, but here, this is achieved without recursion, saving a lot of stack memory.