我很难理解下面函数的递归工作流程,以及它是如何遍历数组对排列进行排序的。
让我困惑的一件事是"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]]