递归函数和列表追加/扩展

时间:2012-03-27 20:13:41

标签: python list function recursion extend

这是一个非常简单的代码,代替了一个更大的问题,但我希望我可以用块来解决它。我将从第一个问题开始。

def testrecurse(z,target):
    x=[]
    if z<target:
        z*=2
        x.append(z)
        x.extend(testrecurse(z,target))
    return x

这是一个测试功能,可以帮助我的大脑进行递归。它需要一个数字,然后显示两个乘法的所有乘法,直到达到目标数。所以,如果我输入:

testrecurse(1,1000)

我收到:

[2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

太棒了!输出看起来很干净。但这是我的问题,我很难在我的输出中追加或添加第一个值。这就是我想要输出的样子。

[1,2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

我尝试过更改

x=[] to x=[z]

然后我收到:

[1, 2, 2, 4, 4, 8, 8, 16, 16, 32, 32, 64, 64, 128, 128, 256, 256, 512, 512, 1024, 1024]

任何帮助都会受到赞赏,我是递归的新手,这会让我头疼。

1 个答案:

答案 0 :(得分:26)

这个怎么样?

def testrecurse(z, target):
    if z >= target:
        return []
    return [z] + testrecurse(2 * z, target)

示例:

>>> testrecurse(1, 1000)
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

请注意,它不再包含1024。如果需要,请将第三行更改为

        return [z]

当然你通常不会递归地写这个,而是使用for循环或itertools.takewhile()