汉若塔递归(读懂递归和写出递归)

来源:互联网 发布:破解炒股软件 编辑:程序博客网 时间:2024/05/12 17:19

还记得大一的时候在两个学长的帮助下,琢磨了几天才把这个汉若塔递归的程序看懂,琢磨清白。
现在大二了,花了5,6个小时才把他写出来。真的没感觉到进步,特别是今天发现好多东西都忘了,当推出这个递归的时候ztm尴尬,这么容易还推了这么久,不应该早就推出来了吗?汗。不说闲话直接分析了;

1;关于汉若塔;
这里写图片描述
将其具体问题化;
假设有3个分别命名为X,Y,Z的塔座,在塔座X上插有n个直径大小各不相同,依小到大编号为1,2,3,4,,,n的圆盘,现在要求将X抽的n个圆盘移至塔座Z上并且仍然按同样的顺序叠加,圆盘移动时须遵循一下规则;
1;每次只能移动一个圆盘,
2;圆盘可以插在X,Y,Z中的任意一个塔座。
3;任何时候都不能将一个较大的圆盘压在较小的圆盘之上;
这里写图片描述
这里假设,小的标号1号,大的为n号,因此要始终满足小号在上;

2;关于其思维;
1,——将压在编号为n的圆盘之上的n-1个盘从台座X——借助Z台座——移至Y上,
2——将编号n的圆盘直接从X移至Z;
3——再将在Y台座的n-1个盘——借助X台座——移至Z塔座

3;先看怎么读懂程序吧;
这里写图片描述
怎么根据这程序就可以实现汉若塔的移动呢?
这里写图片描述
其中123步骤就是上面2中的三点;

1,——将压在编号为n的圆盘之上的n-1个盘从台座X——借助Z台座——移至Y上,2——将编号n的圆盘直接从X移至Z;3——再将在Y台座的n-1个盘——借助X台座——移至Z塔座

你可以将代码运行一下,可以得到其运行结果就是图片标号的结果;
然后再在纸上模拟一遍就差不多读懂这个程序了,但是怎么不看程序,当做没了了解过这个代码来自己相出这样的递归呢;

4;怎样写出递归
还是根据第二点的思维;只是再添加一点东西;

1,——将压在编号为n的圆盘之上的n-1个盘从台座X——借助Z台座——移至Y上,2——将编号n的圆盘直接从X移至Z;3——再将在Y台座的n-1个盘——借助X台座——移至Z塔座

它是只宏观的说了要怎样做,但具体就没说了,我们要实现就是要具体的都要搞清楚,这个搞清楚了那么代码也就不远了。
其实那是那样的思路,只是将其微分化;
例如1步骤——上面的n个,就是1到n-1;下部呢,就是继续化,继续化成3步,只是之前的n变成了n-1,不断的划分知道n=1结束;
3步骤也是一样的,这样就具体化了吧?
为什么可以这样划分,因为移动的规则就是满足大直径的在上面即可;我们这样将n-1个分成n-2个只是将相对最小的那个先不考虑,但是那个相对而言是大的,也就是可以放到台座下面,不用管上面是怎样移动的,因为上面的圆盘始终会小于这个瓜分出来的。
这里写图片描述

关于汉若塔的实现就到这里了;其实这个还有很多拓展,下次遇到再补上‘
1;n个盘最少移动2的n次方-1步就可以完成;

哈哈;又到深夜,又是开热点来发博客,睡觉。下次应该不会再把这个忘了吧。哈哈;

2 0