汉诺塔问题
一个只能用递归的方法来解决的问题,问题描述:有三根标号为A,B,C的柱子,在A上放着64个金盘,每一个都比下面的略小,现在需要把A柱上的盘子全部移到C柱上,移动的条件是:一次只能移动一个金盘,移动过程中大金盘不能放在小金盘的上面
结题思路:设A柱上盘子总数为n,如果n=1,则将盘子从A移到C,否则执行以下3部:
(1)用C柱做过渡,将A柱上的n-1个盘子移到B柱上
(2)将A柱上最后一个盘子直接移到C柱上
(3)用A柱做过渡,将B柱上的n-1个盘子移到C柱上
算法描述:
void Hannoi(int n,string A,string B,string C){
if(n==1){
将A顶部盘子移到C;
}
else{
Hannoi(n-1,A,C,B);
将A顶部的盘子移到C;
Hannoi(n-1,B,A,C);
}
}
摘自<<数据结构>>