这是一个非常简单的代码,代替了一个更大的问题,但我希望我可以用块来解决它。我将从第一个问题开始。
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]
任何帮助都会受到赞赏,我是递归的新手,这会让我头疼。
答案 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()
。