我正在教程站点中回顾递归的主题,并遇到以下问题和解决方案:
问题:
给出一个整数,创建一个函数,该函数返回该整数中所有单个数字的总和。例如:如果n = 4321,则返回10,因为4 + 3 + 2 + 1 = 10。
解决方案:
def sum_func(n):
if n<10:
return n
else:
return n%10 + sum_func(int(n/10))
pass
我理解“如果n <10”是基本情况-如果n是一位数字,则只需返回n。我无法解决的是代码的“ n%10 + sum_func(int(n / 10))”行。假设n为235,n%10等于5,int(n / 10)等于23。那么最终5 + 23将变为28而不是10。
有人可以帮助我了解“ n%10 + sum_func(int(n / 10))”是做什么的吗?如果您一次可以遍历逻辑一行,将不胜感激!
答案 0 :(得分:3)
如果n = 235
,则int(n/10)
是23
。但是,您确实 不 添加5和23。您添加了sum_func(int(n/10))
和5
。
sum_func(int(n/10))
不是int(n/10)
sum_func(int(n/10))
将数字“ 23
”中的数字加在一起。
因此,sum_func(int(n/10)) == 2 + 3 == 5
sum_func(235) == sum_func(235)
== sum_func(23) + 5
== sum_func(2) + 3 + 5
== 2 + 3 + 5
答案 1 :(得分:2)
正如您所说的,如果只有1位数字,请返回它。
%是modulus
运算符-即除以10的余数或仅是最后一位数字(即235%10 = 5)
int(n / 10)丢弃自int()函数向下舍入后的最后一位数字-即235-> 23
现在,您似乎感到困惑的是在sum_func
中,一旦删除了最后一位,即再次调用sum_func
,剩下的数字即23(这是递归部分)将返回5
即你有
sum_func(235)
=5 + sum_func(23)
=5 + (3 + sum_func(2))
=5 + (3 + (2))
=10