有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要求把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。
定义函数
void fun(盘数, 始发位置, 中间位置, 到达位置);
void fun(int n,char a,char b,char c);
如果n=1,则直接从A移到C就可以了。
如果n>1,此时需要三个步骤:
1) 把 A 的n-1个盘子从A 经C 移到B;
2) 把 A 剩下的1个盘子移到 C;
3) 把 B 的n-1个盘子从B 经A 移到C;
1 #include <iostream> 2 using namespace std; 3 4 void fun(int n,char a,char b,char c); 5 6 void main(int argc, char* argv[]) 7 { 8 fun(5,'A','B','C'); 9 } 10 11 void fun(int n,char a, char b,char c) 12 { 13 if(n==1) 14 cout << a << "->" << c << '\t'; 15 else 16 { 17 fun(n-1,a,c,b); 18 fun(1,a,b,c); 19 fun(n-1,b,a,c); 20 } 21 }