Python递归函数,用于返回数字中数字的平均值

2024-04-18 23:40:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个递归函数,返回数字中数字的平均值。例如,数字123的平均值为2。我知道如何编写一个数字求和的函数,但不使用,因为我无法返回数字来除以函数。 打印值无法更改,因此我无法传递数字或类似数字

def media(x):
  if x<1:
    return 0
  else:
    return x%10+media(x//10)

print(media(91234))

Tags: 函数returnifdef数字mediaelse平均值
2条回答

使用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是递归最差的语言之一,尤其是它没有优化尾部调用

作弊:让python处理到字符串的转换

内置函数str将整数转换为数字字符串。您可以将其与ord结合使用以获取数字的值:

def media(x):
  s = str(x)
  return sum((ord(c) - ord('0')) for c in s) / len(s)

我假设它是平均值,而不是你所写的中位数。要查找数字的平均值,可以将数字转换为类型str,然后通过使用for ... in string在字符串上迭代来提取每个数字。接下来,将每个数字转换回来,并找到这些数字的平均值

编辑:它不是递归的,但是对于这种简单的计算,使用递归似乎没有什么意义

相关问题 更多 >