递归函数和列表追加/扩展
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<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()
。
【讨论】:
你知道吗,我从没想过将列表连接起来,非常感谢你,我认为这会很有帮助。 你先生,应该得到比你更多的喜欢以上是关于递归函数和列表追加/扩展的主要内容,如果未能解决你的问题,请参考以下文章