代码相信大家都能看懂并理解,但再面对类似问题时自己却很难再提炼出递归思路并写出程序,这里以汉诺塔为引子浅谈以下如何分析问题:
递归的核心解决思路就是将大问题转化成若干个小问题。分析问题首先需要对问题进行落实,对于汉诺塔来说,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即可,这里只简单分享下自己的分析思路,希望对大家有帮助。
Sign in to make a reply
Tired 2Moon
代码相信大家都能看懂并理解,但再面对类似问题时自己却很难再提炼出递归思路并写出程序,这里以汉诺塔为引子浅谈以下如何分析问题:
递归的核心解决思路就是将大问题转化成若干个小问题。分析问题首先需要对问题进行落实,对于汉诺塔来说,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即可,这里只简单分享下自己的分析思路,希望对大家有帮助。