代码实现:
#include <iostream>
using namespace std;
void move(char a, char c) {cout << a << "->" << c << endl;}
void hanoi(int n, char a, char b, char c) {
//如果只有一个盘子 直接从a移动到c
if (n == 1) move(a, c);
else {
//将n个盘子看成两个部分 1 和 n-1
首先需要借助c柱将n-1和盘子从a移动到b
hanoi(n-1, a, c, b);
//将剩下的一个盘子直接从a移动到c
move(a, c);
//将在b柱上的n-1个盘子借助a柱从b移动到c
hanoi(n-1, b, a, c);
}
}
int main() {
int n;
cin >> n;
hanoi(n, 'a', 'b', 'c');
return 0;
}
时间复杂度: