上 C 语言课的时候,都实现过汉诺塔的例子,就在想是不是用PLC也可以实现,因为不确定PLC能否实现递归,所以有了前面的帖子;既然能实现22层,那对汉诺塔来说已经够多了。此处只定义了10层,这样的话应该需要2的10方减1,也就是1023个数组条目,用来存储步骤过程;写这个的目的主要是锻炼逻辑思维,可以把递归当成是有限的多项式展开;
0.题目: 有10个大小不一的托盘位于左侧柱子A, 限制要借助中间柱子B, 把A 边的10个托盘,移动到柱子C.
1.解题思路
观察移动托盘的过程,总结规律。
10个托盘步骤太多,可以先假设1,2,3,4
1个托盘:A->C(1),
2个托盘:A->B(1),A->C(2),B->(1)
3个托盘:把前面2个托盘当成一个整体A->B,使得最大托盘露出来后,A->C(3),把中间2 个托盘移动到C.
4个托盘:、、、、、、、、、
总结规律:一共分三个步骤,二种情况;
第一种情况:托盘不止一个
分三步:有n个托盘,先把n-1 个挪到中间位置,把露出来的第n个挪到目标位置,再把中间位置(n-1)个挪到目标位置; 之后再把n-1当作n,继续完成这种情况,直到n为1 了,调用第二种;
第二种情况:托盘只剩下一个
就一步:把托盘挪到目标位置;
2.程序
2.1 先定义变量
2.2 TIA 程序
2.3 运行结果(括号里是第几个托盘)
2个托盘的时候;
3个托盘的时候
5个托盘的时候