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语句中尝试这个时我得到一个错误。有没有办法用我当前的代码完成这个?
虽然我理解递归背后的原理,但我发现很难将它应用于这个问题并且会感激任何帮助。
答案 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]