汉诺塔问题的递归实现。
不得不说很复杂,想了一晚上才想通了执行的过程,不知道是哪个伟人想出来的,竟然把递归用的如此出神入化,我等望尘莫及。
1 #include <iostream> 2 using namespace std; 3 #include<string> 4 5 void move(char x, char y) 6 { 7 cout<<x<<"-->"<<y<<endl; 8 } 9 10 11 void f(int n,char one,char two,char three){ 12 if(n == 1){ 13 move(one,three); 14 }else{ 15 //首先将A上的n-1个盘子借助C移动到B上, 16 //然后将A上的最后一个大盘子移动到C上, 17 //最后将B上的n-1个盘子借组A移动到C上 18 f(n - 1,one,two,three); 19 move(one,three); 20 f(n - 1,two,one,three); 21 } 22 } 23 int main(){ 24 int m; 25 cout<<"输入盘子数:"; 26 cin>>m;; 27 f(m,'A','B','C'); 28 }