需要帮助来了解此Python函数的递归流程

时间:2020-10-13 01:23:51

标签: python arrays python-3.x recursion permutation

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

让我感到困扰的一件事是当它在递归函数中时,return [nums [:]]调用的行为。由于第9行再次调用其自身直到'start == 2',它何时继续执行第9行之后的行,并针对哪些递归函数执行这些行?

很抱歉,如果我的问题有点令人困惑,我最近才开始学习Python,希望对递归函数中的“ return”调用如何工作有更好的了解。任何建议表示赞赏!

ExternalFunction

1 个答案:

答案 0 :(得分:0)

(对于初学者)使用打印语句是最好的分析方法之一。您可以运行以下代码以查看发生了什么事情(我只是在适当的位置插入了打印语句)。

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]]