与python中的递归函数混淆

与python中的递归函数混淆,python,recursion,Python,Recursion,大家好,我是python应用程序开发新手。我是来学习python中的重现函数的。我所做的代码 def something(a): if a == 0: return 0 else: return 2 + something(a) 当我调用类似于pythons(5)的函数时,它会调用类似于TypeError:something()的错误,缺少1个必需的位置参数:“b” 我想给一个数字加上两个,就像我调用某物(5)它必须返回5+2=7一样 我不知道我为什么会犯这个错误。希望你们能帮

大家好,我是python应用程序开发新手。我是来学习python中的重现函数的。我所做的代码

def something(a):
if a == 0:
    return 0
else:
    return 2 + something(a)
当我调用类似于
pythons(5)
的函数时,它会调用类似于
TypeError:something()的错误,缺少1个必需的位置参数:“b”

我想给一个数字加上两个,就像我调用
某物(5)
它必须返回5+2=7一样

我不知道我为什么会犯这个错误。希望你们能帮我解决这个问题。我想知道这是不是一个低级的问题


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

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

def pythons(a,b):
    if a == 0:
        return a
    else:
        return a * (b-1)
或者简单地(具有相同的结果):


这里有几个问题。首先,当涉及缩进时,python代码对空格敏感(请注意,问题被编辑了,之前的格式不正确)。其次,您需要匹配提供给函数的参数数量:

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

编写
def pythons(a,b):
定义了一个名为
pythons
的函数,并指定它正好包含两个参数,
a
b
。以前您试图用pythons(b-1)调用它,错误消息会准确地告诉您出了什么问题,当函数预期得到2个参数时,您只提供了1个参数。

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

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)

您可以看到,在最后调用
pythons(b-1)
。您需要在那里传递两个参数。您在python中调用python,但只提供一个参数。这是一个奇怪的递归函数。首先,在递归调用中只传递了一个参数。其次,它将始终返回0。功能的目的是什么?两件事。1.要理解递归,首先需要理解递归。2.这与其说是关于递归的问题,不如说是关于你不理解python中的基本函数参数,与递归无关。我建议您花些时间完全熟悉Python函数的基础知识,然后再回到递归。在您的问题中,包括一些示例输入和预期输出,以便我们更好地理解。非常感谢。比如:输入:
pythons(2,5)
,输出:(???)它给出了文件“”,第5行,在names中返回a*names(a,b-1)@user3783784,请解释一下你打算用你的程序做什么。我只想用recrusive函数添加两个数字…当我调用pythons(2,3)这样的函数时…它在我运行时给我带来了一个错误mentioned@user3783784,还有,为什么是
名称
?它不应该是
pythons
@user3783784吗?此外,如果您正在添加为什么代码中有
*
。请把你的问题解释清楚。当我用add(5,2)@user3783784调用函数时,很难理解add返回1+add(0,b-1)时,在add返回1+add(0,b-1)中连续出现类似文件“”(第3行)这样的错误。试试这个,很高兴能帮上忙。您可能想了解算法和递归的一般概念,并接受这一点作为答案:)当我创建一个类似def names(a)的函数时:返回名称(a+1)并调用类似函数的名称(2)…它给我错误..你能告诉我为什么它会这样给我错误吗?每当你写递归函数时,你必须有一个终止条件,这样递归才能停止。在您的例子中,每个函数都使用大于1的值调用自己。但是它不知道什么时候停止。因此,它将不断地呼唤自己,直到时间的尽头。但是python检查递归是否超过限制,它会停止调用并引发错误
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)