汉诺塔问题
递归的本质思想,大问题与子问题之间的联系,只要想清楚联系,初始步骤,和结束条件,剩下的就交给计算机吧!
可以看:木子猫neko
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define endl '\n'
using namespace std;
int n;
void hannuota(int n, char a, char b, char c)
{
if (n == 0)
return ;
hannuota(n - 1, a, c, b); //子问题
cout << a << "---->" << c << endl;
hannuota(n - 1, b, a, c); //子问题
}
int main()
{
IOS; cin.tie(0), cout.tie(0);
cin >> n;
char a = 'A', b = 'B', c = 'C';
hannuota(n, a, b, c); //大问题
return 0;
}
//A有n个盘子,我想把A的盘子移到C,并且大的盘子在下,且移动次数最少,那可以先把A中n - 1个盘子先通过C移到B,再把A的盘子移到C,再把B中n - 1个盘子通过A移到C
最后当盘子为0时结束
只想关系,好神奇!