【问题标题】:Python recursive function counting the userPython递归函数计数用户
【发布时间】:2020-05-25 02:25:24
【问题描述】:

count_users 函数递归地计算公司系统中属于某个组的用户数量,方法是遍历组中的每个成员,如果其中一个是组,则递归调用该函数并计算成员数。但是它有一个错误!你能发现问题并解决它吗?

def count_users(group):
    count = 0
    for member in get_members(group):
        count += 1
        if is_group(member):
            count += count_users(member)
    return count
print(count_users("sales")) # Should be 3
print(count_users("engineering")) # Should be 8
print(count_users("everyone")) # Should be 18

【问题讨论】:

  • 你能举出数据的例子吗?预期输出与实际输出是什么?

标签: python-3.x recursion


【解决方案1】:
def count_users(group):
    count = 0
    for member in get_members(group):
    #count += 1
        if is_group(member):
            count += count_users(member)
        else:
            count+=1
    return count

print(count_users("sales")) # Should be 3
print(count_users("engineering")) # Should be 8
print(count_users("everyone")) # Should be 18

【讨论】:

    【解决方案2】:

    问题在于你的 for 循环。目前,对于组的每个“成员”,您的计数都会增加 1,即使该成员本身就是一个组。 而是将此行移动到 if is_group(member) 之后的新 else 分支,因此如果member 是一个组,它只会增加成员数,如果member 不是一个组,它只会增加 1。

    【讨论】:

      【解决方案3】:
      def count_users(group):
        count = 0
        for member in get_members(group):
          count += 1
          if is_group(member):
            count += count_users(member)-1
        return count
      
      print(count_users("sales")) # Should be 3
      print(count_users("engineering")) # Should be 8
      print(count_users("everyone")) # Should be 18
      

      【讨论】:

      • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
      【解决方案4】:

      这是正确的解决方案:

      def count_users(group):
        count = 0
        for member in get_members(group):
          count += 1
          if is_group(member):
            count += count_users(member)-1
       return count
      

      print(count_users("sales"))# 应该是3

      print(count_users("engineering"))# 应该是8

      print(count_users("everyone")) # 应该是18

      【讨论】:

        【解决方案5】:
        def count_users(group):
          count = 0
          for member in get_members(group):
            #count += 1
            if is_group(member):
              count += count_users(member)
            else:
              count += 1
          return count
        
        print(count_users("sales")) # Should be 3
        print(count_users("engineering")) # Should be 8
        print(count_users("everyone")) # Should be 18
        

        【讨论】:

          【解决方案6】:
          def count_users(group):
            count = 0
            for member in get_members(group):
              count += 1
              if is_group(member):
                count += count_users(member)
                count -= 1
            return count
          
          print(count_users("sales")) # Should be 3
          print(count_users("engineering")) # Should be 8
          print(count_users("everyone")) # Should be 18
          

          count -= 1 意味着只需要从 count 变量中删除一个假设的成员,结果证明是一个组。

          【讨论】:

            猜你喜欢
            • 2017-06-14
            • 1970-01-01
            • 2023-04-04
            • 2015-12-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多