需要帮助理解这个Python函数的递归流



我很难理解下面函数的递归工作流程,以及它是如何遍历数组对排列进行排序的。

让我困惑的一件事是"return[nums[:]]"调用在递归函数中的行为。由于第9行再次调用自己,直到"start==2",它什么时候继续执行第9行之后的行?它为哪一个递归函数执行那些继续执行的行?

很抱歉,如果我的问题有点令人困惑,我最近才开始学习Python,我想更好地了解"return"调用在递归函数中是如何工作的。欢迎提出任何建议!

class Solution(object):
def _permuteHelper(self, nums, start=0):
if start == len(nums) - 1:
return [nums[:]]
result = []
for i in range(start, len(nums)):
nums[start], nums[i] = nums[i], nums[start]
result += self._permuteHelper(nums, start + 1)
nums[start], nums[i] = nums[i], nums[start]
return result
def permute(self, nums):
return self._permuteHelper(nums)
print(Solution().permute([1, 2, 3]))
# [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]

使用print语句是最好的分析方法之一(对于初学者来说(。您可以运行下面的代码来查看到底发生了什么(我只是在适当的地方插入了print语句(。

class Solution(object):
def _permuteHelper(self, nums, start=0):
if start == len(nums) - 1:
print('Returns: ',[nums[:]])
return [nums[:]]
result = []
print("Start: ",start)
for i in range(start, len(nums)):
nums[start], nums[i] = nums[i], nums[start]
print("Swapped:", start," ", i)
result += self._permuteHelper(nums, start + 1)
nums[start], nums[i] = nums[i], nums[start]
return result
def permute(self, nums):
return self._permuteHelper(nums)
print(Solution().permute([1, 2, 3])

输出:

Start:  0
Swapped: 0   0
Start:  1
Swapped: 1   1
Returns:  [[1, 2, 3]]
Swapped: 1   2
Returns:  [[1, 3, 2]]
Swapped: 0   1
Start:  1
Swapped: 1   1
Returns:  [[2, 1, 3]]
Swapped: 1   2
Returns:  [[2, 3, 1]]
Swapped: 0   2
Start:  1
Swapped: 1   1
Returns:  [[3, 2, 1]]
Swapped: 1   2
Returns:  [[3, 1, 2]]
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]

最新更新