I removed the free() call because it was crashing. I also added a cast to the malloc() because I was compiling in C++. Compiled with
g++ -o hanoi hanoi.cpp -O2 -lrt g++ -o hanoi hanoi.cpp -O2 -lrtSo I'm seeing similar results as you. Your iterative implementation is about 3x faster than the author's, but still not as fast as the recursive version. I'm surprised!