一块板上有三根针A、B和C,A针上套有n个大小不等的圆盘,大的在下,小的在上。要把这n个圆盘从A针移动C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上,求移动的步骤。
设A上有n个盘子,该问题可分解为下面的问题加以解决:
如果n=1,则将圆盘从A直接移动到C。
如果n=2,则:
1.将A上的n-1(等于1)个圆盘移到B上;
2.再将A上的一个圆盘移到C上;
3.最后将B上的n-1(等于1)个圆盘移到C。
如果n=3,则:
1. 将A上的n-1(等于2,令其为n’)个圆盘移到B(借助于C),步骤如下
(1)将A上的n’-1(等于1)个圆盘移到C上。
(2)将A上的一个圆盘移到B。
(3)将C上的n’-1(等于1)个圆盘移到B。
2. 将A上的一个圆盘移到C。
3. 将B上的n-1(等于2,令其为n’)个圆盘移到C(借助A),步骤如下:
(1)将B上的n’-1(等于1)个圆盘移到A。
(2)将B上的一个盘子移到C。
(3)将A上的n’-1(等于1)个圆盘移到C。
附上程序:
#!/bin/sh
fun()
{
if [[ $1 -eq 0 ]]
then
echo ""
else
fun $(($1-1)) $2 $4 $3
echo "$2---->$4"
fun $(($1-1)) $3 $2 $4
fi
}
fun $1 'A' 'B' 'C'