汉诺塔问题我感觉比较复杂,涉及到递归的问题,它的主要难点在于 void hanoi(int N, char x, char y, char z)这一函数。如果简单想,可以理解为把上面的n-1看做一个整体,这样就只有n-1和n这两堆了,这样比较好理解,但深究原因则比较复杂,可以看一下bilibili懒猫老师讲的汉诺塔问题,很清晰,也很醍醐灌顶。
#include<bits/stdc++.h>
using namespace std;
int sum=0;
void move(int N, char x, char y)
{
cout<<"方块"<< N<<" 从 "<< x<<" 移动到 "<< y<< endl;
sum++;
}
void hanoi(int N, char x, char y, char z)
{
if(N==1)
move(1, x, z);
else
{
hanoi(N-1, x, z, y);
move(N, x, z);
hanoi(N-1, y, x, z);
}
}
int main()
{
cout<<"请输入方块数量:";
int n;
char A, B, C;
cin>>n;
hanoi(n, 'A', 'B', 'C');
cout<<"执行次数为:"<< sum;
}