缩位求和(迭代,递归)

题目描述

在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。 比如: 248 x15 =3720 把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得 2+4+8=14==>1+4=5; 1+5=6; 5x6 而结果逐位求和为3。 5x6的结果逐位求和与3符合,说明正确的可能性很大!! (不能排除错误) 请你写一个计算机程序,对给定的字符串逐位求和。

输入描述

输入为一个由数字组成的串,表示n(n<1000)位数

输出描述

输出为一位数,表示反复逐位求和的结果

MyCode

递归算法:递归算法是一种通过将问题分解为更小的子问题来解决问题的方法。在递归算法中,函数会调用自身来解决子问题,直到达到基本情况(base case)为止。递归算法通常具有简洁的代码,但可能会导致栈溢出等问题。

迭代算法:迭代算法是一种通过重复执行一系列操作来解决问题的方法。在迭代算法中,不需要使用递归调用,而是通过循环结构来实现。迭代算法通常具有较好的性能,但可能需要更多的代码来实现相同的功能。

迭代写法:

1
2
3
4
5
6
7
8
9
10
11
num = int(input())
x = num
def num_sum(a):
a = str(a)
res = 0
for i in a:
res += int(i)
return res
while len(str(x)) != 1:
x = num_sum(x)
print(x)

这段代码实现了一个迭代算法,用于计算一个数字的各个位数之和,直到结果为一位数为止。首先,将输入的数字转换为字符串,然后遍历字符串中的每个字符,将其转换为整数并累加到结果中。最后,当结果为一位数时,输出结果。

递归写法:

1
2
3
4
5
6
7
8
9
10
11
12
def num_sum(a):
if len(str(a)) == 1:
return a
else:
a = str(a)
res = 0
for i in a:
res += int(i)
return num_sum(res)

num = int(input())
print(num_sum(num))

这段代码实现了一个递归算法,用于计算一个数字的各个位数之和,直到结果为一位数为止。首先判断输入的数字是否只有一位,如果是,则直接返回该数字;否则,将输入的数字转换为字符串,遍历字符串中的每个字符(即数字的每一位),将其转换为整数并累加到结果中。然后,将累加得到的结果作为参数,再次调用递归函数进行求和操作。这样,每次递归都会将数字的各个位数相加,直到结果只剩下一位数为止。最后,输出最终的结果。


缩位求和(迭代,递归)
https://ianwusb.blog/2024/03/27/缩位求和/
作者
Ianwusb
发布于
2024年3月27日
许可协议