繁体   English   中英

一个递归函数来计算数字的总和

[英]a recursive function to calculate sum of a number digits

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

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,所以现在应该计算总和digit(2),a变为2,2求和,n变为0,sum digit(2)返回2,然后将其与3求和,我必须得到5。我感谢您的帮助。

您有一个无限循环,因为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

或仅使用公告功能(可能不是您的老师想要看到的):

def sum_digit(n):
    return sum(map(int, str(n)))

我必须用if来更改时间,并且它的工作原理非常感谢您的评论,并很抱歉在此处发布这样的问题。

这将达到目的:

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)

输出:

print(sum_digit(67154))
> 23

您正在混合使用迭代方法(while循环)和递归方法(函数调用)。

在递归函数中,必须确保正确执行以下操作:

结束条件(在本例中,当数字为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在函数内部被分配了新的引用,但在外部却不可见。 所以当一部分循环死掉时。 实际上,尽管部分最多执行一次,所以代码如上所述进行了更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM