如何写一个递归函数来打印一定次数的字符串?

时间:2016-09-16 23:10:24

标签: python recursion

我一直在尝试编写一个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']

我将如何做到这一点?

2 个答案:

答案 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'))

Try it online at repl.it

它需要多次作为输入,它返回[word]加(它需要多次 - 1作为输入,它返回[word]加(它需要很多次 - 1作为输入,返回[word])。

注意没有像final = []这样的累加器列表,因为每次通过该函数它都会再次为空。累积发生在编程语言调用函数和返回值的方式中。在计算下一个recurse()输出时,Python会在内存中保留[word]