在python中混淆了递归函数

时间:2014-06-28 04:21:05

标签: python recursion

嘿,伙计们是python应用程序开发的新手。我已经开始了解python中的recrusive函数。我已完成的代码

def something(a):
if a == 0:
    return 0
else:
    return 2 + something(a)

当我调用像pythons(5)这样的函数时,它会将我称为TypeError: something() missing 1 required positional argument: 'b'

之类的错误

我想在一个数字中添加两个,如果我调用something(5)它必须返回5 + 2 = 7

我不知道为什么会收到这个错误。希望你们可以帮助我解决这个问题。如果这是一个低级别的问题,请告诉我。

任何帮助将不胜感激..谢谢提前..

3 个答案:

答案 0 :(得分:2)

这是因为在你的方法中,当你递归调用pythons时,你没有传递两个参数。这可能是你想要的:

def pythons(a,b):
    if a == 0:
        return a
    else:
        return a * (b-1)

或简单地(结果相同):

def pythons(a,b):
    return a * (b-1)

答案 1 :(得分:2)

这里有几个问题。首先,python代码在缩进时是空格敏感的(注意问题已被编辑,格式化以前不正确)。然后,您需要匹配提供给函数的参数数量:

def pythons(a,b):
    if a == 0:
        return a
    else:
        return a * pythons(a,b-1) 

当您编写def pythons(a,b):时,您正在定义一个名为pythons的函数,并且您指定它需要完全 2个参数,a和{{ 1}}。以前您尝试使用b调用它,错误消息会告诉您确切的错误,当函数期望得到2个参数时,您只提供了1个参数。

答案 2 :(得分:0)

如果你的目标是递归地添加两个数字,那么这将是一个更合适的递归函数。

def add(a, b):
    if a == 0 and b ==0:
       return 0
    elif b == 0 and a>= 0:
       return 1 +add(a-1, 0)
    elif a ==0 and b>= 0:
       return 1 + add(0, b-1)
    else: return 2 + add(a-1, b-1)