汉诺塔算法
汉诺塔问题时一个典型的递归算法问题,可以先从简单的3层汉诺塔入手。假设有ABC三根棒子,初始状态时,A棒上放着3个圆盘,将其移动到C棒上,可以用B棒暂时放置圆盘。并且规定一次只能移动一个圆盘,且圆盘在放到棒上时,大的只能放在小的下面。
使用递归思想,可以采用以下步骤来完成圆盘的移动:
(1)将A棒上的两个圆盘(圆盘1和圆盘2)移到B棒上;
(2)将A棒上剩下的一个圆盘移到C棒上;
(3)将B棒上的两个圆盘(圆盘1和圆盘2)移到C棒上,即移动完成。
这里第一步和第三步是移动多个圆盘的操作,可以采用递归的思想,仍然使用上述步骤来完成。
将上述解决问题的步骤加以推广,便可得到如下递归求解汉诺塔算法:
如果只有一个圆盘,则把该圆盘从A棒移动到C棒,完成移动。如果圆盘数量 n>1,移动圆盘的过程可分为三步:
(1)将A棒上的n-1个圆盘移到B棒上;
(2)将A棒上的1个圆盘移到C棒上;
(3)将B棒上的n-1个圆盘移到C棒上。
其中,移动n-1个圆盘的工作可以归结为递归运算。
void