/// G. Hagopian borrowing from Carnegie Mellon the following psuedocode for
/// Towers of Hanoi
/**
FUNCTION MoveTower(disk, source, dest, spare):
IF disk == 0, THEN:
    move disk from source to dest
ELSE:
    MoveTower(disk - 1, source, spare, dest)   // Step 1 above
    move disk from source to dest              // Step 2 above
    MoveTower(disk - 1, spare, dest, source)   // Step 3 above
END IF
*/
#include <iostream>
using namespace std;

int cnt=0;
void moveTower(int disk, char source, char dest, char spare) {
    if(disk==0) { ///base case
        cout << "\nmove 0 from " << source << " to "
             << dest;
        ++cnt;
    }
    else {
        moveTower(disk-1, source, spare, dest);
        cout << "\nmove " << disk << " from " << source
             << " to " << dest;
        ++cnt;
        moveTower(disk-1, spare, dest, source);
    }

}

int main() {
    for(int disks = 1; disks < 10; ++disks) {
        cnt = 0;
        moveTower(disks-1,'A','B','C');
        cout << "\nIt took " << cnt << " moves to do " << disks << " disks.";
        cin.get();
    }
}
