【发布时间】:2021-01-09 11:28:34
【问题描述】:
我在 Python 中有这个函数可以帮助我找到数字的数字之和:
def sum01(n):
if n < 9 and n > 0:
return n
elif n > 9:
s = sum01((n%10)+(n//10))
return s
else:
return "ERROR, only natural numbers (N)!"
print(sum01(22224))
这个函数给出的结果是:
3
但是,我希望看到的结果是:
12
我想在不使用while 或for 循环且没有列表的情况下使用递归函数得到这个答案,但是,我一直没有这样做。
谢谢!
我无法添加我一直在寻找的解决方案作为答案,所以它在问题中。
`def sum01(n):
x = 0
if n < 9 and n > 0:
return n
elif n > 9:
x = (n%10) + x
s = sum01(n//10)
return s + x
else:
return "ERROR, only natural numbers (N)!"`
【问题讨论】:
-
为什么要 12 个? 2+2+2+2+4 -> 12,然后是 1+2 -> 3。
-
用你自己的话说,你觉得这个函数是如何工作的?为什么,具体来说,你认为它给你 3 而不是 12?您是否尝试过手动追踪其逻辑?如果你这样做了,你可能会发现有一个
12计算的点。也许只是……停在那里?我注意到你用recursion标记了这个问题。您是否有特定的原因需要递归来解决问题?为什么?您将如何手动解决问题?您的解决方案是否涉及将问题分解为更小的问题? -
这一行的括号错误:
s = sum01((n%10)+(n//10))。它应该是:s = sum01(n//10) + (n%10)。说明:n%10是个位数的值。n//10是“没有个位”的数字。您想将个位数的值与剩余数字的总和相加。例如如果n = 8964,那么n%10 == 4和n//10 == 896。在这种情况下,递归调用应该是sum01(8964) = sum01(896) + 4而不是sum01(8964) = sum01(4 + 896)。 -
“我正在寻找一种没有 for 或 while 循环的递归函数的方法。”如果目标是为了学习递归而学习递归,作为替换循环的一种方式:诀窍是传递两个参数,以便将“到目前为止的总和”与“剩余数字”分开,并避免一旦超过 9 就“处理”总和。
-
尝试将
how to think recursively放入搜索引擎;那里有很多好材料。
标签: python recursion sum digits