我必须写一个递归函数来计算一个数字的总和,这里是我试过的代码:
def sum_digit(n):
sum=0
a = n % 10
n //= 10
sum += a
while n > 0 :
sum = sum + sum_digit(n)
return sum
print(sum_digit(67154))
我不知道为什么我没有得到23作为答案......我的节目没有结束
例如23号码(请纠正我,如果我错了,我是python中的新手),3是和,n是2,因为它> 0那么它应该去while,所以现在它应该计算总和数字(2),a变为2和2变为sum并且n变为0并且sum数字(2)返回2,然后它与3相加并且我必须得到5。 我感谢你的帮助。
答案 0 :(得分:2)
您有一个无限循环,因为n
永远不会在循环中发生变化。请注意,在被调用函数范围内为n
分配新值不会更改外部作用域中的n
。
此外,您似乎正在将迭代解决方案与递归解决方案混合使用。如果进行递归调用,则不需要循环,反之亦然。
您可以递归地执行此操作:
def sum_digit(n):
if n > 0:
return sum_digit(n // 10) + n % 10
else:
return 0
或者以迭代的方式:
def sum_digit(n):
s = 0
while n > 0:
s += n % 10
n //= 10
return s
或者只是使用bultin功能(可能不是你老师想要看到的):
def sum_digit(n):
return sum(map(int, str(n)))
答案 1 :(得分:0)
我必须用if更改while,并且它有效,感谢您的评论并抱歉在此处发布此类问题。
答案 2 :(得分:0)
这样可以解决问题:
foreach (GeckoHtmlElement geckoHtmlElement in gwBrowser.Document.GetElementsByTagName("select"))
{
if (geckoHtmlElement.GetAttribute("class") == "ng-valid ng-dirty ng-touched")
{
geckoHtmlElement.Click();
}
}
输出:
def sum_digit(n, current_sum=0):
if n == 0:
return current_sum
else:
digit = n % 10
current_sum += digit
n //= 10
return sum_digit(n, current_sum)
您正在混合迭代方法(while循环)和递归方法(函数调用)。
在递归函数中,必须确保正确使用这些东西:
结束条件(在我们的例子中,当数字为0时我们返回总和)
和
递归调用(在我们的例子中,每次都向下移动一个数字)
答案 3 :(得分:0)
更改您的代码如下:
def sum_digit(n):
sum=0
a = n % 10
n //= 10
sum += a
if n > 0 :
sum = sum + sum_digit(n)
return sum
原因是n在函数内部被赋予了新的引用,但它在外部是不可见的。所以虽然部分是循环死亡。实际上,虽然part最多执行一次,但代码却如上所述进行了更改。