关于python

时间:2018-06-13 13:12:27

标签: python

我需要做一个像这样工作的递归函数:

  

输入:'word'

     

输出:['word','ord','rd','d']

现在,最好的方法就是这样:

func(string):
    if not string:
        return []
    return [string] + func(string[1:])

但我想这样做:

func(string, recursivelist):
    if len(string) == 0:
        return []
    recursivelist += [string]
    recursivelist += func(string[1:],recursivelist)
    return recursivelist

我知道这是一个做递归函数的坏方法,我正在慢慢尝试第一种方法,但出于好奇,为什么这段代码无效?

输出如下:

  

['word','ord','rd','d','word','ord','rd','d','word','ord','rd','d ','word','ord','rd','d','word','ord','rd','d','word','ord','rd','d', 'word','ord','rd','d','word','ord','rd','d']

2 个答案:

答案 0 :(得分:0)

每个递归调用都会获得相同的列表,而不是它的副本。因此,您不需要添加递归调用的返回值,因为它们都修改了相同的列表。这足以:

def func(string, recursivelist):
    recursivelist.append(string)
    func(string[1:], recursivelist)
    return recursivelist

答案 1 :(得分:-2)

不使用递归的简单解决方案:

def func(word):
   for i in xrange(len(word)):
       yield word[i:]

>>> list(func("word"))
['word', 'ord', 'rd', 'd']

或者如果您不想使用' yield':

def func(word):
    return [ word[i:] for i in xrange(len(word)) ]