递归思考

时间:2017-07-09 10:00:45

标签: recursion

我想问一下在编写时是否真的有必要跟踪每个递归调用,因为如果递归调用在循环内部或在多个for循环内部,我会遇到麻烦。当我试图了解正在发生的事情时,我只是迷路了。 您是否有一些建议如何处理递归问题以及如何设想它。我已经阅读了很多关于它的内容,但我还没有找到一个完美的答案。我理解例如factorial如何工作或fibonacci递归。例如,当我尝试打印1到5长度为3的所有组合或所有n-queen问题的解决方案时,我迷路了

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题,尝试绘制一个树状结构,跟踪每个递归调用。节点是一个函数,该节点的每个子节点都是从该函数发出的递归调用。

答案 1 :(得分:1)

每个人都可能有不同的心理方法来建模递归问题。如果你能以非递归的方式解决n皇后问题,那你就没事了。但是,掌握递归概念来解决问题肯定是有帮助的。如果您正在进行心理锻炼,那么我建议您在PROLOG上写一本教科书。它很有趣,从一开始就教授递归。

尝试在n-queens上进行一些大脑转储。通过尝试和错误,它就像“我将如何手动完成”。对于n-queens,我建议在你的脑海里称它为8级皇后作为开始,只是为了使它看起来更熟悉和直观。 “n”不是迭代器,而是指定问题大小。

  • 你认为n-queens具有自相似性,即你将单个皇后放在棋盘上 - 这是你的候选递归例程
  • 对于给定的董事会,你有一个例程来测试最新加入的女王是否与之前放置的女王发生冲突
  • 对于给定的董事会,如果当前职位的测试不成功,你有一个例程来为女王找到你尚未测试过的职位
  • 如果您刚刚放置的女王是第n个(最后一个)女王
  • ,则打印出所有女王职位
  • 否则(如果当前的女王被有效放置),你将另外一位女王

以上是您的计划。您的例程将传递早期女王的位置列表。第一次调用是一个空列表。