递归与分治_hanoi
问题分析
将n个圆盘从A>C,可以分解为3个步骤
- 将n-1个圆盘从A>B
- 将1个圆盘从A>C
- 将n-1个圆盘从B>C
代码实现
#include <iostream>
using namespace std;
int step=0;
void move(int n,char a,char b){
printf("%d:move %d from %c to %c\n",++step,n,a,b);
}
void hanoi(int n,char a,char b,char c){
if(n>0){
hanoi(n-1,a,c,b);
move(n,a,c);
hanoi(n-1,b,a,c);
}
}
int main()
{
int n;
while(cin>>n){
hanoi(n,'a','b','c');
step=0;
}
return 0;
}
时间复杂度
O(2n)
需要移动的次数:
- 2n-1