Python 计算数字和的递归函数
我必须编写一个递归函数来计算一个数字的和,下面是我尝试的代码:Python 计算数字和的递归函数,python,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去
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去求和,n变成0,和数字(2)返回2,然后它和3求和,我必须得到5。
非常感谢您的帮助。我必须用if更改while,它很有效,谢谢您的评论,也很抱歉在这里发布这样的问题。您有一个无限循环,因为
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, 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在函数内部被分配了新的引用,但在函数外部它是不可见的。所以,当部分是循环死亡。事实上,虽然part最多执行一次,但代码还是如上所述进行了更改。
而n>0
在循环中您永远不会更改n
。似乎您在这里混合了迭代和递归解决方案。尽管您将n
更改为n/=10
,但这只会影响该函数中的n
。您需要了解作用域和递归如何工作才能理解这一点,但基本上修改n
不会影响调用sum\u digit
的函数;博士将while
更改为if
,不要将sum
用作变量,因为它会屏蔽内置函数。
def sum_digit(n):
sum=0
a = n % 10
n //= 10
sum += a
if n > 0 :
sum = sum + sum_digit(n)
return sum