#include<iostream>
#include<time.h>
using namespace std;
//求n的阶乘 n!=n * (n-1)!
int fact(int n)
{
if (n==1)
{
return 1;
}
return n* fact(n - 1);
}
//汉诺塔问题 把柱子上前n-1个看成一个整体 共移动2n次方-1次
int sum = 0;
void move(char m, char n)
{
static int count;
cout << "此时第" << ++count << "次:";
cout << m << "-->" << n << endl; //移动盘子
sum++;
}
void hanoi(int n, char a, char b, char c) //借助b将n个盘子从a搬到c
{
if (n==1)
{
move(a, c); //一个盘子就直接从a移动到c
}
else
{
//借助c把n-1个盘子借助空柱子c从a移动到b,
hanoi(n - 1, a, c, b );
//把a上最后的n号盘子移动到c
move(a, c);
//把b上把n-1个盘子借助空柱子a从b移动到c
hanoi(n - 1, b, a, c);
}
}
int main()
{
int n;
cout<<fact(5)<<endl;
cout << "请输入盘子数:";
cin >> n;
cout << "移动" << n << "个盘子的过程:" << endl;
hanoi(n, 'A', 'B', 'C');
cout <<"共执行了" << sum << "次" << endl;
return 0;
}