/*分析:(逐步复杂化) A柱只有一个盘子的情况:A->B; A柱有两个盘子的情况:小盘A->B,大盘A->C,小盘B->C A柱有N个盘子的情况:将此问题看成上面的N-1个盘子和最下面的第N个盘子的情况
N-1个盘子A->B;第N个盘子A->C;N-1盘子B->C 此问题转化为搬N-1的问题,就这样递归下去,只有一种情况不是和上面的情况一样,就是只有一个盘子 时,这就是递归结束的条件 算法分析: (1)N-1个盘子A->B,要借助C (2)第N个盘子A->C; (3)N-1个盘子B->C;要借助A 其中第1步和第3步又都是要对这个递归进行调用的,直到也只有一个盘子的情况, 由此可定义两个函数: Exchange(int n,char source,char temp,char target) 它实现将N个盘子从源柱source借助中间柱temp搬到target柱, 另一个函数定义为Move(char source,char target),用来输出搬运一个盘子的提示信息
实现的部分://要加强对函数的封装的理解 void Move(char source,char target) { cout<
//间 的temp else { Exchange(n-1,source,target,temp);//这里要根据Exchange的形参的变量来,重新变化,看看上面的算法分析 Move(source,target);//看看上面的算法分析 Exchange(n-1,temp,source,target);//看看上面的算法分析 } } void main() { int n; cout<<"请输入盘子的数目"< cin>>n; getchar(); Exchange(n,'A','B','C'); cout<<'\n'; }
|