Discuss / Python / 如何从实际问题提炼递归思想

如何从实际问题提炼递归思想

Topic source

Tired 2Moon

#1 Created at ... [Delete] [Delete and Lock User]

代码相信大家都能看懂并理解,但再面对类似问题时自己却很难再提炼出递归思路并写出程序,这里以汉诺塔为引子浅谈以下如何分析问题:

递归的核心解决思路就是将大问题转化成若干个小问题。分析问题首先需要对问题进行落实,对于汉诺塔来说,n=3是一个相对更加普遍的情况。

综合自己的解决问题办法,分析相似性,可以将这一情境下的过程提炼出来:(具体整合过程需要自己的敏感性)

1、2从A-->B

3从A-->C

1、2从B-->C

发现了什么?一三过程十分类似,本质并没有区别。二过程则是简单的移动。重复性的出现就会让人想到递归或循环等。

1、2的整体移动并不是我们最终需要的,我们更想要的可能是二过程中的基础的移动方式。于是我们再对1、2从A-->B进一步分析:

1从A-->B

2从A-->C

1从B-->C

是否感觉似曾相识?是否非递归莫属了。

而n=3及以后的过程都是对n=2的嵌套重复,由此递归的思路便确定了。

代码在评论区很多大佬都贴出来了,move(n,a,b,c)的意思理解成a-->c即可,这里只简单分享下自己的分析思路,希望对大家有帮助。


  • 1

Reply