擅长:python、mysql、java
<p>当您可以简单地使用<code>for</code>循环时,递归是不必要的:</p>
<pre><code>nums = [2,3,4,6]
def backtrck(starting_index, nums):
start = nums[starting_index]
for num in nums[starting_index + 1:]:
print([start, num])
backtrck(0, nums)
</code></pre>
<p>输出:</p>
<pre><code>[2, 3]
[2, 4]
[2, 6]
</code></pre>
<p>其中,切片<code>nums[start_index + 1:]</code>返回<code>nums</code>列表中所有元素的列表,从<code>starting_index</code>后面的一个标记开始</p>
<h3>更新</h3>
<p>既然您已经指出递归在代码中是必要的,只需将<code>backtrck(temp, i, nums)</code>递归调用替换为<code>backtrck(i, nums, [temp[0], nums[i]])</code>即可保留列表的起始索引:</p>
<pre><code>nums = [2, 3, 4, 6]
def backtrck(starting_index, nums, temp=[]):
if len(temp) == 2:
print(temp)
return
temp.append(nums[starting_index])
for i in range(starting_index + 1, len(nums)):
backtrck(i, nums, [temp[0], nums[i]])
backtrck(0, nums)
</code></pre>
<p>输出:</p>
<pre><code>[2, 3]
[2, 4]
[2, 6]
</code></pre>
<p>请注意,我已将位置参数<code>temp</code>更改为关键字参数。它仍然可以使用<code>temp</code>作为位置参数,但是如果<code>temp</code>列表总是以空开头,那么它就不那么实用了</em></p>