【发布时间】:2022-01-02 18:33:59
【问题描述】:
最近我一直在处理 Python 中的一些递归问题,我必须使用递归生成可能的配置列表(即给定字符串的排列列表、子字符串列表等)。我很难找到最佳实践,也很难理解如何在递归中管理这种变量。
我将给出generate binary trees 问题的示例。我或多或少知道我必须在递归中实现什么:
- 如果 n=1,则只返回一个节点。
- 如果 n=3,则返回唯一可能的二叉树。
- 对于 n>3,创建一个节点,然后探索可能性:左节点没有子节点,右节点没有子节点,两个节点都没有子节点。递归探索这些可能性。
现在我最难以想象的事情是我将如何准确地到达树木列表。目前我所做的做法是在函数调用中传递一个列表(作为参数)并且该函数将返回这个列表,但是问题是在调用递归函数以探索节点的可能性时的情况 3 它将是返回一个列表,而不是将节点附加到我正在构建的树上。当我在脑海中描绘递归树时,我想象一个“树”变量对每个树叶都是唯一的,并且这些树被添加到由“根”(即第一个)调用返回的列表中。但我不知道这是否可能。我想到了一个全局列表和递归函数不返回任何东西(只是附加到它),但我认为问题是在每次调用时函数都会收到变量的副本。
在这些递归情况下,我该如何处理生成组合和返回配置列表?虽然我举了一个例子,但答案越笼统越好。我也想知道在这方面是否有“最佳实践”。
【问题讨论】:
-
"目前我的做法是在函数调用中传递一个列表(作为参数),然后函数将返回这个列表,"嗯,列表代表什么?各个元素代表什么?实际的策略是什么?
-
欢迎回到 Stack Overflow。作为复习,请阅读How to Ask。这个问题要是再具体点就更好了。包含实际代码很好,但它也可以解释如何您打算在代码中使用该列表。我不知道您所说的“递归树”是什么意思。我们通常也不处理有关“最佳实践”的问题。
-
@KarlKnechtel 谢谢。你能否详细说明什么会被认为是“更具体的”?我没有添加代码,因为这会使问题过于具体。这里展示了一个递归树:cs.cornell.edu/courses/cs3110/2012sp/lectures/lec20-master/…
-
@KarlKnechtel 在第一条评论中回答您的问题:该列表将代表问题示例中可能的二叉树上的可能配置(例如排列)。例如,如果我要返回每个可能的二叉树的根,我将返回一个根节点列表。
-
重新树:我猜它们只是意味着绘制出在递归算法期间发生的所有调用;但该页面似乎更倾向于确定算法的大 O 复杂性,而不是弄清楚如何编写它们。
标签: python list recursion return