对于一些算法,我发现它方便地定义递归函数,看起来是这样的:循环递归函数
def f(l):
for i in range(2):
if len(l)>=1:
print(l+[i])
else:
return f(l+[i])
f([0])
但行为是我所期望的不同。它所做的是打印
[0, 0]
[0, 1]
但我希望它打印
[0,0]
[0,1]
[1,0]
[1,1]
不知何故,嵌套函数可以访问变量和我,而不是开始一个新的循环与一些不同的变量,它只需继续用这个变量i进行计数。我不明白为什么Python会这样做。
我的(含糊不清)问题是为什么Python这样做,是否有一些明显的修改我的代码,会给我最初的预期输出?
你永远不会改变'l',它从'len(l)== 1'开始,这意味着它打印两次并存在:你的'else'永远不会被触发。 – TemporalWolf
输入“[0]”如何导致你描述的输出?请[编辑]你的问题,包括[mcve]。 – TemporalWolf
@Keiwan任何有效的输入(一个列表)可能会提供给该函数,它会输出上述或提供的列表两次,然后是一个0,然后是一个1。我怀疑这不是他的意图。 – TemporalWolf