擅长:python、mysql、java
<p>在<code>podz</code>,这里:</p>
<pre><code>lis = list(lista)
</code></pre>
<p>您可以从<code>lista</code>的内容创建一个新列表。然后在这里进行递归调用时传递这个新列表:</p>
<pre><code> if x % i == 0:
lis.append(i)
# print(f'lis2: {lis}')
podz(int(x / i), lis)
</code></pre>
<p>因此,在递归调用中,您再次创建一个新列表并附加到它,然后在递归调用返回时丢弃这个新列表,并且由于递归调用对第一个列表的副本起作用,因此第一个列表也不会更新。你知道吗</p>
<p>要使其工作,必须将递归调用的结果添加到第一个列表中:</p>
<pre><code> if x % i == 0:
lis.append(i)
# print(f'lis2: {lis}')
lis.extend(podz(int(x / i), lis))
</code></pre>
<p>第二个版本(<code>podzb</code>)没有复制列表,因此所有递归调用都会更新同一个列表。你知道吗</p>