【问题标题】:Find the base value of a given number using recursion in python在python中使用递归查找给定数字的基值
【发布时间】:2015-03-14 17:36:00
【问题描述】:
def find_values(number, base, args=[]):
    if number // base != 0:
        args = args + find_values(number // base, base, args+[number % base])
        return args
    else:
        args = args + [number % base]
        return args

print(find_values(120, 10))

该函数假设取数字(以 10 为底)并更改它以满足给定的基值。

这是迄今为止我想出的最好的东西。返回和打印的数组具有我需要在那里的所有三个值,但由于某种原因在索引 0 处有一个额外的 0,并且数组需要反转,但是,每次我在 else 语句中尝试这个时,我都会得到一个错误。有什么方法可以用我当前的代码完成这个吗?

虽然我了解递归背后的原理,但我发现很难将其应用到这个问题上,希望能提供任何帮助。

【问题讨论】:

    标签: python python-3.x recursion


    【解决方案1】:

    你犯了两个错误:

    • 您将现有的args 列表添加到新号码之前;颠倒这些。

    • 递归时添加现有的args 列表两次。一次作为递归调用的参数,然后再次作为返回值。择其一,而不是两者兼而有之。

    以下版本通过仅在一个方向上操作args 来纠正这两个错误:

    def find_values(number, base, args=[]):
        if number // base != 0:
            args = find_values(number // base, base, [number % base] + args)
            return args
        else:
            args = [number % base] + args
            return args
    

    可以简化为:

    def find_values(number, base, args=[]):
        args = [number % base] + args
        if number // base:
            return find_values(number // base, base, args)
        return args
    

    除了将列表构建为参数之外,您还可以按原样“在输出时”构建它:

    def find_values(number, base):
        args = [number % base]
        if number // base:
            return find_values(number // base, base) + args
        return args
    

    【讨论】:

    • 谢谢,您的解决方案非常有帮助!
    【解决方案2】:

    另一种(更简单)使用递归的方法是:

    def find_values(number, base):
        if number < base:
            return [number]
        else:
            return find_values(number / base, base) + [number % base]
    

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 2020-11-05
      • 2021-12-28
      • 2020-09-08
      • 2020-11-25
      • 2018-08-15
      相关资源
      最近更新 更多