汉诺塔(1)

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 07:31   24   0
#include<iostream>
using namespace std;
void Hanoi(int n,char x,char y,char z)
{if(n==1)
       cout<<"将第"<<n<<"个圆盘从"<<x<<"移动到"<<z<<endl;
 else 
 {
  Hanoi(n-1,x,z,y);
  cout<<"将第"<<n<<"个圆盘从"<<x<<"移动到"<<z<<endl;
  Hanoi(n-1,y,x,z);
  } 
 } 
 int main()
 {
  int n;
  char x,y,z;
  while(cin>>n>>x>>y>>z)
  Hanoi(n,x,y,z);
  return 0;
 }



关于移动方法其实很好理解,也很容易得出移动次数2*(n-1)+1

补充:

1)A,B,C三根柱子其实不是固定的,而是随着Hanoi(1,A,B,C)这个原始函数变化的。参考如下:
https://www.zhihu.com/question/24385418/answer/107705695
2)关于递归的概念,其实就是将一项连续的巨大的任务分为若干个互相联系的小任务,我们并非要推算出每一步,而是应该着眼于n与n-1之间的关系。参考如下:
https://www.zhihu.com/question/24385418/answer/258015386

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP