我们今年刚开始在学校学习python,到目前为止我们只用tkinter画布(绘图房子,鲜花等)做基本的东西,我们的老师有点糟糕,所以我现在必须学习我所知道的一切。
我一直在考虑编写函数来查找数字的数字总和(最好没有递归)的想法,所以我想出了这个:
def sum(n):
total=0
for letter in str(n):
total+=int(letter)
return total
然而,我有一个关于使用递归来找到"绝对挖掘的想法。数字的总和",例如99 = 9 + 9 = 18 => 1 + 8 = 9 我想出了这个
total=0
def suma(n):
global total
def part_sum(n):
global total
total_part=0
for letter in str(n):
total_part+=int(letter)
total=total_part
if total<10:
print(total)
else:
part_sum(total)
part_sum(n)
它基本上是n的总和,检查它是否低于n,如果不是它再次运行它(基本递归),但它使用一堆变量和全局变量(由于某种原因,它们很糟糕)我已经听过了)并且我很清楚使用类和对象可以更有效地完成它,但是我只看了几个视频,所以我不太擅长它。 / p>
有人可以编辑我的代码并在此处粘贴一些注意事项以帮助我理解吗?
答案 0 :(得分:1)
递归经常被滥用。我相信如果没有它,你可以更清楚地写出suma()
。以你已经创造的东西为基础。
def sum(n):
total=0
for letter in str(n):
total+=int(letter)
return total
def suma(n):
while n >= 10:
n = sum(n)
return n
答案 1 :(得分:0)
这是我的解决方案
def rec_dig_sum(n):
total = str(sum(map(int, str(n))))
while len(total)>1:
total = str(sum(map(int, total)))
return int(total)
您可以认为map
正在接受map(function, [input1, input2, input3])
并返回[function(input1), function(input2), function(input3)]
答案 2 :(得分:0)
而不是保存变量并在循环的每次迭代中更新它(正常的方法):
def recursive_sum(num):
if num >= 10:
return recursive_sum(sum(map(int, str(num))))
return num
将其作为参数发送给新的函数调用:
def rc(n, c=0):
if n:
return rc(n//10, c+n%10)
return c
def rs(n):
if n >= 10:
return rs(rc(n))
return n
你也可以做一个递归函数来进行初始求和,并在继续这样做的函数中使用它直到它只有一位数:
{{1}}