汉诺塔问题(递归)

来源:互联网 发布:关于gps数据统计的书 编辑:程序博客网 时间:2024/06/04 17:49

经典的递归问题:三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。

#include<iostream>using namespace std;/** a上的圆盘移动到b上,通过c来辅助 * n表示圆盘的数量 */ int Hanoi(int n,char a,char b,char c){if(n==1)cout<<a<<"->"<<b<<endl;else{Hanoi(n-1,a,c,b);//先把a上的n-1个圆盘移动到c上,通过b的辅助cout<<a<<"->"<<b<<endl;//把a剩下的最大的一个移动到b上Hanoi(n-1,c,b,a);//把c上n-1个移动到b上,通过a的辅助}}int main(){Hanoi(3,'a','b','c');return 0;}

图为n=3时的情况



原创粉丝点击