汉诺塔问题

一直都没有真正理解汉诺塔,今天花了一个下午总算弄懂了

#include<iostream>
using namespace std;

void ha(int n, char a, char b, char c);
void move(char a, char c);
int main()
{
char a = 'a', b = 'b', c = 'c';
int n;
cin >> n;
ha(n, a, b, c);
return 0;
}
void ha(int n, char a, char b, char c)//最重要的是理解这个函数的意义 这个函数的意思是 n个环,从a经过b到c
{
if (n == 1)
{
move(a, c);//当只有一个环的时候 通过函数move 表示这一个环 直接从a移动到c
}
else
{
ha(n - 1, a, c, b);//否则 把n-1个环当成一个整体 将它从a经过c送到b
ha(1,a,b,c);//把最后一个环 即1个环从a经过b移动到c
ha(n - 1, b, a, c);//最后把b上的n-1个环从b经过a移动到c
}//递归下去
}
void move(char a, char c)
{
cout << a << "->" << c << endl;//把a和c以某种方式表示 注意 a和c仅仅是形参
}

posted on 2018-03-01 20:50  晴未  阅读(105)  评论(0编辑  收藏  举报