编程思想之递归

本文章的代码如下链接:https://github.com/RunningIOS/HanoiDemo

工作中偶尔用到递归编程,最近抽空看看网上的文章,在解决汉诺塔问题上的解决问题思路很受启发。

经典的汉诺塔问题(这里不具体介绍规则了),面对看似相当复杂的问题,如果按照一般的思维去思考整过移动过程那个累呀,总觉得没底气实现呀。如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数

我们可以使用假设法进行分析问题:

要想A中的最大的圆盘移动到C中,那么A上面的圆盘全部都得移动到B中,然后再将A上面的圆盘全部移动到C中即可完成任务,那么如何将A上面的圆盘全部移动到C中呢,其实是可以重复了上面的移动方法,所以移动过程可以这样进行

1、将A上面的除最大的圆盘全部移动到B中

2、将A中最大的圆盘移动到C中

3、将B中的圆盘全部已到C中任务即可完成


为了完成3中的任务,又可以拆分任务

4、现将B中的除最大的圆盘全部移动到A

5、将B中最大的圆盘移动到C中

6、将A中的全部圆盘移动到C中即可完成任务


为了完成6中的任务,又可以拆分任务

.

.

.

面对一个很大的问题时,我们尝试分析出一些规律,尝试拆分成小问题,然后再把小问题继续拆分为更小的问题,循环往复地拆分下去,直到不能再拆分为止,对于这种问题就可以使用递归方法解决。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.爱可以拯救对生活失去希望的书店老板 当一个人心中没有爱的时候,世界上的一切都变得无所谓,包括死亡。 2.好人难...
    书店温老板阅读 134评论 2 1
  • 没有教养的人吃饭吧唧嘴,像狗一样,有点侮辱狗了
    东莞colin阅读 165评论 0 0