在递归函数中收集参数

时间:2013-11-22 17:36:44

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

我目前正在学习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

这有可能吗?

4 个答案:

答案 0 :(得分:2)

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

return gcd((b, a % b))

答案 1 :(得分:2)

当然,你只需要保持一致。定义gcd以获取两个参数:

def gcd(a, b):

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

return gcd((b, a % b))

答案 2 :(得分:1)

我认为你应该能够在你的论点周围放一对额外的括号,如下:

return gcd((b, a % b))

这会使你的两个位置参数成为一个元组,作为单个位置参数传递。

或者你可以放弃解压缩,只接受两个位置参数而不是一个元组。

答案 3 :(得分:1)

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

return gcd((b, a % b))

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

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

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