用于计算数字总和的递归函数

时间:2015-11-13 15:11:09

标签: python

我必须写一个递归函数来计算一个数字的总和,这里是我试过的代码:

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。 我感谢你的帮助。

4 个答案:

答案 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最多执行一次,但代码却如上所述进行了更改。