#include enum pole_name{left, middle, right}; class Pole { private: pole_name p; public: Pole() { p = left; } Pole(pole_name x) :p(x) {} //{ p = x; } friend std::ostream& operator << (std::ostream& out, Pole o); }; std::ostream& operator << (std::ostream& out, Pole o) { switch(o.p) { case left: out << "left"; break; case middle: out << "middle"; break; case right: out << "right"; } return out; } // recursive void move(int n, Pole src, Pole aux, Pole dest) { // base case if (n == 1) // one disk from src to dest { std::cout << "move from " << src << " to " << dest << std::endl; } else { move(n - 1, src, dest, aux); // recursive call std::cout << "move from " << src << " to " << dest << std::endl; move(n - 1, aux, src, dest); // recursive call } } int main() { int n = 1; Pole src(left), dest(right), aux(middle); std::cout << "Please enter the number of disks: "; std::cin >> n; move(n, src, aux, dest); }