【问题标题】:Python recursive function to return the mean of the digits in a numberPython递归函数返回数字中数字的平均值
【发布时间】:2021-02-08 14:40:49
【问题描述】:

我正在尝试创建一个递归函数,该函数返回数字中位数的平均值。例如,数字 123 的平均值是 2。我知道如何编写一个对数字求和但不使用 for 我无法返回数字来划分函数的函数。 打印值不能改变,所以我不能传递一些数字或类似的东西。

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

print(media(91234))

【问题讨论】:

  • 你为什么不想使用for
  • 你可以使用两个函数。一个只对数字求和,一个做最后除法。

标签: python recursion


【解决方案1】:

使用for-循环

确实没有理由不为此使用for-loop。

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)

【讨论】:

    【解决方案2】:

    我假设它是 mean 而不是 median,就像您写的那样。要找到数字的平均值,您可以将数字转换为 str 类型,然后通过使用 for ... in string 迭代字符串来提取每个数字。接下来,将每个数字转换回来并找到这些数字的平均值。

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

    【讨论】:

    • 是的,这就是我可以做到的问题,但只有使用递归方法我无法做到。
    猜你喜欢
    • 2019-03-15
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2012-12-11
    • 2017-03-29
    相关资源
    最近更新 更多