C++递归,汉诺塔

来源:互联网 发布:android sql语句 编辑:程序博客网 时间:2024/06/03 22:06

  

A为存放盘子的塔,B为目标塔,C为辅助塔 
算法分为三步 
一、将A上n-1个盘子全部放到C塔上 
二、将A上剩下的一个盘子放到B塔上 
三、将C塔上的盘子全部放到B塔上

注:不需要考虑如何移动n-1个盘子

递归过程: 
首先,将A上n-1个盘子放到C上,然后将A上剩下的一个盘子放到B上,然后可以看成A为辅助塔,B为目标塔,C为放盘子的(B中有一个最大的盘子,但任何盘子都能放到上面,所以可以看做为空),然后将C上n-2个盘子放到A上,剩下的地n-1个盘子放到B上,此时便完成了一次递归,然后不断地重复上述过程即可

代码

ABC分别是123柱子,代码思路大概是这样的把N-1层的环子先通过C移到B,最后再把第N层的最大的环子移到C,这个时候就剩下一个N-1层的新“塔”,那么我们把他看成一个新的“塔”把B柱看成之前的A柱,通过C柱把(N-1)-1层移到A柱,再把第N-1层的最大(原本第二大)的环子放到C,如此循环最后N=1 就了解了。[cpp] view plain copy print?#include<iostream>  using namespace std;  void hanoi(int n,char a,char b,char c)  {  if(n==1)  cout<<n<<" "<<a<<" "<<c<<endl;  else  {  hanoi(n-1,a,c,b);  cout<<n<<" "<<a<<" "<<c<<endl;  hanoi(n-1,b,a,c);  }  }  int main()  {  int n;  cout<<"输入正整数:"<<endl;  cin>>n;  cout<<"结果为"<<endl;  hanoi(n,'A','B','C');  /* 假设有4层,跟全排列差不多的想法,先把他看成3层,再看成2层,而且移动的方法是相同的。*/   


原创粉丝点击