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

Posted

技术标签:

【中文标题】递归函数和列表追加/扩展【英文标题】:Recursive functions and lists appending/extending 【发布时间】:2012-04-11 10:07:38 【问题描述】:

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

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

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

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]

任何帮助将不胜感激,我是递归的新手,这让我很头疼。

【问题讨论】:

在乘以 2 之前尝试追加,并将 if z&lt;target 改为使用 哦,谢谢你,我没有意识到像这样简单的改变会解决它。 【参考方案1】:

这个怎么样?

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()

【讨论】:

你知道吗,我从没想过将列表连接起来,非常感谢你,我认为这会很有帮助。 你先生,应该得到比你更多的喜欢

以上是关于递归函数和列表追加/扩展的主要内容,如果未能解决你的问题,请参考以下文章

递归函数 集合 列表 元组

main函数可否进行递归调用

Python中的递归函数不会更改列表[重复]

递归与回溯:python列表组合问题

Koltin 递归尾递归和记忆化

python之内置函数与匿名函数递归函数初识