Python 递归-语法错误:无效语法

Python 递归-语法错误:无效语法,python,recursion,Python,Recursion,我试图编写一个递归方法,如下所示,但我得到了SyntaxError:无效语法,我想知道我做错了什么 给定一个非负整数num,重复添加其所有数字,直到 结果只有一个数字 例如: 给定num=38,过程如下:3+8=11,1+1=2。自2 只有一个数字,请返回它 类解决方案(对象): def addDigits(self,num): """ :type num:int :rtype:int """ 如果x%9已更新以匹配新问题描述,则返回self.addDigits(x=sum(str(num)中的

我试图编写一个递归方法,如下所示,但我得到了SyntaxError:无效语法,我想知道我做错了什么

给定一个非负整数num,重复添加其所有数字,直到 结果只有一个数字

例如:

给定num=38,过程如下:3+8=11,1+1=2。自2 只有一个数字,请返回它

类解决方案(对象):
def addDigits(self,num):
"""
:type num:int
:rtype:int
"""

如果x%9已更新以匹配新问题描述,则返回self.addDigits(x=sum(str(num)中的i代表i):

def add_digits(x):
    return (x - 1) % 9 + 1 if x else 0
如果应用此解决方案的暴力版本(您最初尝试的版本),则您将看到输出实际上是此处列出的序列:

一旦我们知道这是一个重复序列,我们就可以在序列中寻找模式,在这种情况下,我们意识到这个答案中的函数在O(1)时间和空间上提供了一个有保证的解决方案


通过在此处查看此序列,您实际上可以看到与
n%9
的关系:

已更新以匹配新问题描述:

def add_digits(x):
    return (x - 1) % 9 + 1 if x else 0
如果应用此解决方案的暴力版本(您最初尝试的版本),则您将看到输出实际上是此处列出的序列:

一旦我们知道这是一个重复序列,我们就可以在序列中寻找模式,在这种情况下,我们意识到这个答案中的函数在O(1)时间和空间上提供了一个有保证的解决方案



通过在此处查看此序列,您实际上可以看到与
n%9
的关系:

那么,当x>=10时,代码应该做什么?如果您需要帮助修复代码,您必须解释代码应该做什么。您将什么传递给num as?它看起来像一个字符串,您想添加数字?您的参数是
num
但是你将
x
作为kwarg传递?是的,这是无效的语法,我甚至猜不出它应该做什么…@Aran Fey问题被更新了,那么当x>=10时,代码应该做什么?如果你想帮助修复代码,你必须解释代码应该做什么。你将什么传递给num as?它看起来可能是一个string,你想添加数字吗?你的参数是
num
,但你将
x
作为kwarg传递?是的,这是无效的语法,我甚至猜不出它应该做什么…@Aran Fey问题是更新的我正在学习递归方法,因此我不想知道如何解决问题,而是想知道我现在在做什么ng在我的实现中。我已对您的努力进行了投票。@GrantWilliams您的答案仅将数字相加,但不会产生OP要求的期望的一位数结果(即返回11表示38,而不是2)@米海切拉鲁:你是对的。当我最初写答案的时候,这个问题要复杂得多ambiguous@hotspring实际上,您不需要递归(或迭代)为了解决这个问题。如果你只是在学习递归,我真的建议你研究一下斐波那契序列或阶乘程序。这很容易让你费解。这个序列被称为n
seq 888
的加法数字根。如果你喜欢,你可以阅读更多关于它的内容,或者你可以看到序列
n%9
的nce,即
seq 878
(忽略0的基本情况)是相同的,不同的是
seq 878
是0-8,而不是像
seq 888
是那样的1-9。我们可以使用这个新序列
seq 878
,通过从x中减去1,然后进行模9来调整当前值以适应它(将其作为
seq878
的一部分,然后向其添加1,以转换回
seq888
。我正在学习递归方法,因此,我不想知道如何解决问题,而是想知道我在实现中做错了什么。我对您的努力投了更高的票。@GrantWilliams您的答案只会将数字相加,但不会产生错误。)uce OP所要求的单位数字结果(即38返回11而不是2)@MihaiChelaru你是对的。当我最初写答案时,问题要多得多ambiguous@hotspring实际上,您不需要递归(或迭代)为了解决这个问题。如果你只是在学习递归,我真的建议你研究一下斐波那契序列或阶乘程序。这很容易让你费解。这个序列被称为n
seq 888
的加法数字根。如果你喜欢,你可以阅读更多关于它的内容,或者你可以看到序列
n%9
的nce,即
seq 878
(忽略0的基本情况)是相同的,不同的是
seq 878
是0-8,而不是像
seq 888
是那样的1-9。我们可以使用这个新序列
seq 878
,通过从x中减去1,然后进行模9来调整当前值以适应它(使其成为
seq878
的一部分,然后向其添加1以转换回
seq888