新手需要帮助来了解Python的递归

时间:2020-11-10 02:06:17

标签: python algorithm recursion

正如标题所暗示的那样,我仍然是编程的新手,并且遇到了这种递归算法,并停留了3-4个小时,仍然无法弄清楚递归的工作原理

任务是:(抱歉图片而不是文字,因为它们不允许用户复制和粘贴)

enter image description here

解决方案是:

class BinaryTree:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None


    def branchSums(root):
        sums = []
        calculateBranchSums(root, 0, sums)
        return sums
    
    def calculateBranchSums(node, runningSum, sums):
        if node is None:
            return 
        newRunningSum = node.value + runningSum
        
        if node.left is None and node.right is None:
            sums.append(newRunningSum)
            return
        calculateBranchSums(node.left, newRunningSum, sums)
        calculateBranchSums(node.right, newRunningSum, sums)

我实际上理解这里的逻辑,但是我对两点确实感到困惑:

(1)当我们最初使用sums作为运行calculateBranchSums的空白列表时,它如何修改sums列表而不返回并重新分配给sums

(2)为什么return函数中的所有calculateBranchSums都什么都不返回;

1 个答案:

答案 0 :(得分:0)

在python中,列表是通过引用传递的。这意味着,如果您为函数提供列表,并且该函数使列表发生变化,则更改将反映在函数外部:

def modify(lst):
    lst[0] = 1

myList = [4, 5, 6]
modify(myList)
myList # [1, 5, 6]

该函数不需要返回任何内容,因此return仅返回任何内容,并且仅存在以尽早退出该函数。