void move_discs(Pin &orig, Pin &dest, int num_discs) { // Stop case of recorrence if (num_discs == 1) { move_disc(orig, dest); return; } // Discover intermediate pin if (orig.pos() != PIN_A && dest.pos() != PIN_A) { move_discs(orig, p_a, num_discs - 1); move_disc(orig, dest); move_discs(p_a, dest, num_discs - 1); } else if (orig.pos() != PIN_B && dest.pos() != PIN_B) { move_discs(orig, p_b, num_discs - 1); move_disc(orig, dest); move_discs(p_b, dest, num_discs - 1); } else { move_discs(orig, p_c, num_discs - 1); move_disc(orig, dest); move_discs(p_c, dest, num_discs - 1); } }