#include<stdio.h>
#include<iostream>
using namespace std;
void HanoiRecursion1(int n, char a, char b, char c);//两种递归的结束条件不同
void HanoiRecursion2(int n, char a, char b, char c);
int main ()
{
int n = 3;
HanoiRecursion1(n, 'A', 'B', 'C'); cout << endl;
HanoiRecursion2(n, 'A', 'B', 'C');
}
void HanoiRecursion1(int n, char a, char b, char c)
{
if(n == 1)
{
printf("move %d from %c to %c\n", n, a, c);
return;
}
HanoiRecursion1(n - 1, a, c, b);//把n-1个盘子看做一个整体通过c移动到b柱子上 现在b柱子上有n-1个盘子
printf("move %d from %c to %c\n", n, a, c);//把a的最后1个盘(最大的盘)移动到c
HanoiRecursion1(n - 1, b, a, c);//把 b 上n-1个盘子通过 a 移动到 c 将n-1个盘子看做整体
}
void HanoiRecursion2(int n, char a, char b, char c)
{
if(n > 0)
{//用0阶汉诺塔做循环的结束条件 此时什么都不需要做
HanoiRecursion2(n - 1, a, c, b);//把n-1个盘子看做一个整体通过c移动到b柱子上 现在b柱子上有n-1个盘子
printf("move %d from %c to %c\n", n, a, c);//把a的最后1个盘(最大的盘)移动到c
HanoiRecursion2(n - 1, b, a, c);//把 b 上n-1个盘子通过 a 移动到 c 将n-1个盘子看做整体
}
}