【问题标题】:Recursive functions & family trees递归函数和家谱
【发布时间】:2016-12-12 11:57:01
【问题描述】:

我被一个字典格式的给定家谱的递归函数困住了(键是父母,值是孩子)。

例如family_tree = {"Adam": ["Michael", "Clara", "Daniel"], "Clara": [], "Daniel": ["Elizabeth", "Hans"], etc.}

本例中的亚当有 3 个孩子,其中之一是克拉拉。她没有孩子,等等等等。非常简单。

现在,对于递归函数。

  1. 编写一个函数 depth(person),返回人的家谱的深度。

如果一个人没有孩子,那么他的家谱的深度是 1。如果他有孩子,但没有孙子,深度是 2。如果他有孙子,但没有孙子,深度是3. 以此类推。

这不应该工作吗?

def children(person): return family_tree[person]

def depth(person): if not children(person): return 1 for child in children(person): a = depth(child) if a!= None: return a + 1

谢谢! :)

【问题讨论】:

  • 您能否展示解决此问题的任何努力,以说明您需要帮助的地方?
  • 哦,我一般需要递归方面的帮助。我不知道如何解决这个问题。
  • 做了第二个!更新了问题。 :)
  • 请编辑发布的代码,使其可读(换行和缩进问题)
  • 深度不依赖于孩子的数量,正如您的代码所暗示的那样。

标签: function python-3.x dictionary recursion


【解决方案1】:

计算深度的逻辑是:

if a person has no children
    depth is 1
else
    depth is 1 + (maximum depth of person's children)

【讨论】:

    【解决方案2】:

    你的问题是最里面的条件:

    • 你应该总是返回一个整数结果; 不是一个好的选择。
    • 您需要返回 1 加上所有子项的 最大 深度。您当前的代码返回 first 孩子的深度加 1。

    对你的内在循环要有耐心。如果有孩子,只需跟踪您迄今为止发现的最大深度。完成循环后,然后加 1 并返回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2023-03-24
      • 2010-10-07
      • 1970-01-01
      相关资源
      最近更新 更多