【问题标题】:Gather arguments in a recursive function在递归函数中收集参数
【发布时间】:2013-12-07 16:48:41
【问题描述】:

我目前正在学习 Python,但在修改此函数以使其正常工作时遇到问题。这是一个递归函数,可以从两个整数中找到 gcd。 data 是一个有两个整数的元组。如何修改此递归函数以使用一个参数?

def gcd(data):
    a, b = data
    if b == 0: return a
    return gcd(b, a % b)

如果我这样执行它,我会得到

TypeError: checkio() takes 1 positional argument but 2 were given

如果我尝试通过定义 def gcd(*data): 来收集参数,我会得到

ValueError: need more than 1 value to unpack.

这可能吗?

【问题讨论】:

    标签: python recursion python-3.x argument-passing


    【解决方案1】:

    我认为你应该能够在你的论点周围加上一对额外的括号,就像这样:

    return gcd((b, a % b))
    

    这将使您的两个位置参数成为作为单个位置参数传递的元组。

    或者,您也可以放弃解包,一开始只接受两个位置参数而不是单个元组。

    【讨论】:

      【解决方案2】:

      你的函数需要一个变量(一个元组),但你传递了两个变量,试试这个:

      return gcd((b, a % b))
      

      【讨论】:

        【解决方案3】:

        当然,您只需要保持一致即可。要么定义gcd 接受两个参数:

        def gcd(a, b):
        

        或在调用时将值包装在一个元组中:

        return gcd((b, a % b))
        

        【讨论】:

          【解决方案4】:

          将文字元组作为参数传递需要另一组括号来明确它不是 2 个单独的参数:

          return gcd((b, a % b))
          

          或者,可以先将元组分配给单独的名称(带或不带括号):

          next_data = b, a % b
          return gcd(next_data)
          

          gcd(*data) 可以工作,但您还需要更改初始调用以传递各个参数,格式为gcd(a, b)gcd(*data)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-12-23
            • 2016-07-22
            • 1970-01-01
            • 2015-03-03
            • 2020-12-13
            • 1970-01-01
            • 2012-09-19
            相关资源
            最近更新 更多