2024-04-18 23:40:19 发布
网友
我试图创建一个递归函数,返回数字中数字的平均值。例如,数字123的平均值为2。我知道如何编写一个数字求和的函数,但不使用,因为我无法返回数字来除以函数。 打印值无法更改,因此我无法传递数字或类似数字
def media(x): if x<1: return 0 else: return x%10+media(x//10) print(media(91234))
for
没有理由不为此使用for-循环
def media(x): if x == 0: return 0 else: digits = [] while x > 0: digits.append(x % 10) x = x // 10 return sum(digits) / len(digits)
您可以使用其他累加器参数来存储位数和位数:
def media(x, sumSoFar=0, nDigitsSoFar=0): if x == 0 and sumSoFar==0: return 0 elif x == 0: return sumSoFar / nDigitsSoFar else: return media(x // 10, sumSoFar + (x % 10), nDigitsSoFar + 1)
请注意,python是递归最差的语言之一,尤其是它没有优化尾部调用
内置函数str将整数转换为数字字符串。您可以将其与ord结合使用以获取数字的值:
str
ord
def media(x): s = str(x) return sum((ord(c) - ord('0')) for c in s) / len(s)
我假设它是平均值,而不是你所写的中位数。要查找数字的平均值,可以将数字转换为类型str,然后通过使用for ... in string在字符串上迭代来提取每个数字。接下来,将每个数字转换回来,并找到这些数字的平均值
for ... in string
编辑:它不是递归的,但是对于这种简单的计算,使用递归似乎没有什么意义
使用
for
-循环没有理由不为此使用
for
-循环如果你坚持递归
您可以使用其他累加器参数来存储位数和位数:
请注意,python是递归最差的语言之一,尤其是它没有优化尾部调用
作弊:让python处理到字符串的转换
内置函数
str
将整数转换为数字字符串。您可以将其与ord
结合使用以获取数字的值:我假设它是平均值,而不是你所写的中位数。要查找数字的平均值,可以将数字转换为类型
str
,然后通过使用for ... in string
在字符串上迭代来提取每个数字。接下来,将每个数字转换回来,并找到这些数字的平均值编辑:它不是递归的,但是对于这种简单的计算,使用递归似乎没有什么意义
相关问题 更多 >
编程相关推荐