我正在尝试创建一个递归函数,用于添加数字中的所有数字.这是我想出的:
def sumOfDigits(num):
num=str(num)
if len(num)==0:
return 0
elif len(num)==1:
return int(num)
elif len(num)>1:
return int(num[0]) + int(num[-1]) + int(sumOfDigits(num[1:-1]))
Run Code Online (Sandbox Code Playgroud)
这似乎适用于几乎任何数字:
sumOfDigits(999999999)
>>>81
sumOfDigits(1234)
>>>10
sumOfDigits(111)
>>>3
sumOfDigits(1)
>>>1
sumOfDigits(0)
>>>0
Run Code Online (Sandbox Code Playgroud)
如果数字以'0'开头,会发生奇怪的事情
sumOfDigits(012)
>>>1
sumOfDigits(0123)
>>>11
sumOfDigits(00010)
>>>8
Run Code Online (Sandbox Code Playgroud)
我在这里失踪了什么?
NPE*_*NPE 12
在Python 2中,以零开头的整数文字是八进制的.
举个例子:
In [46]: 012
Out[46]: 10
In [47]: 0123
Out[47]: 83
In [48]: 0010
Out[48]: 8
Run Code Online (Sandbox Code Playgroud)
由于您的函数在十进制中运行,因此它正确地完成了它的工作.:)
另外,对于这个问题,你既不需要字符串操作也不需要递归.由于其他人已经提出了非递归解决方案,这里是一个不使用字符串操作的递归方法:
def sumOfDigits(n):
return 0 if n == 0 else sumOfDigits(n // 10) + n % 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |