我一直在尝试编写一个python函数,它将接收两个参数:x
这是重复的次数,y
是要重复的数字或字符串。
到目前为止,这是我能够提出的,但我似乎无法确定如何递归。
def recurse(x, y):
final = []
if x == 0:
return ("")
else:
x = x - 1
final.append(recurse(x,y))
return final
如果调用recurse(3,"Cat")
,则输出结果如下:
print recurse(3, 'cat')
['cat','cat','cat']
我将如何做到这一点?
答案 0 :(得分:1)
真正的函数递归应该具有 no 赋值(即状态)。 这可以使用所谓的 accumulator 来实现,即一个连续构建并传递到每个递归步骤的数组,直到基本情况发生,从而导致累加器的最终结果表格直接返回,间接一直返回到初始调用实例。
>>> def recurse(Iters, text, Accumulator=[]):
... if Iters == 0: return Accumulator # base case
... return recurse(Iters-1, text, Accumulator + [text]) # recursive step
...
>>> recurse(3, 'helle')
['helle', 'helle', 'helle']
请注意, state 在任何时候都没有变化;所有"更新"在使用更新的参数调用下一个递归步骤时发生。
答案 1 :(得分:0)
def recurse(x, y):
final = []
if times == 0:
你不能仅仅引用“时代”,好像它是某种神奇的浮动变量,随处可见。第一次来到这里,times
没有任何价值。下一次,你希望你可以凭空挑出times
的价值,而且在之前的一次运行中它会神奇地成为其他地方的。
您可以使用的唯一变量是完全在函数内部的变量 - 或者从外部传入的变量,并在最后返回。
def recurse(times, word):
if times == 1:
return [word]
else:
return [word] + recurse(times-1, word)
print(recurse(3, 'cat'))
它需要多次作为输入,它返回[word]
加(它需要多次 - 1作为输入,它返回[word]
加(它需要很多次 - 1作为输入,返回[word]
)。
注意没有像final = []
这样的累加器列表,因为每次通过该函数它都会再次为空。累积发生在编程语言调用函数和返回值的方式中。在计算下一个recurse()输出时,Python会在内存中保留[word]
。