使用python中的递归查找给定数字的基值

时间:2015-03-14 09:15:04

标签: python python-3.x recursion

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语句中尝试这个时我得到一个错误。有没有办法用我当前的代码完成这个?

虽然我理解递归背后的原理,但我发现很难将它应用于这个问题并且会感激任何帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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