【问题标题】:Recursive thinking递归思维
【发布时间】:2017-12-13 04:37:57
【问题描述】:

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

【问题讨论】:

  • 你需要给出一个非常具体的例子来说明你想要理解什么,你不理解什么。
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 on topichow to ask 在这里申请。 StackOverflow 不是设计、编码、研究或教程服务。

标签: recursion


【解决方案1】:

我遇到了类似的问题,尝试绘制一个树状结构来跟踪每个递归调用。其中一个节点是一个函数,并且该节点的每个子节点都是从该函数进行的递归调用。

【讨论】:

  • 我一直在尝试这样做,但是当问题更复杂时,很难为我画出来
  • @Zokav 在这种情况下,我会说你必须举一个更具体的例子,或者你可以尝试编写一个为你绘制树的程序。
【解决方案2】:

对于递归问题建模,每个人都可能有不同的思维方式。如果您可以以非递归方式解决 n 个皇后问题,那么您就可以了。不过,掌握递归的概念来解决问题肯定是有帮助的。如果您准备进行心理锻炼,那么我建议您阅读有关 PROLOG 的教科书。这很有趣,而且从一开始就非常教递归。

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

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

以上是你的程序。您的例程将传递早期皇后的位置列表。第一次调用是一个空列表。

【讨论】:

    猜你喜欢
    • 2012-11-19
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 2014-02-17
    • 2017-12-28
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多