正如标题所暗示的那样,我仍然是编程的新手,并且遇到了这种递归算法,并停留了3-4个小时,仍然无法弄清楚递归的工作原理
任务是:(抱歉图片而不是文字,因为它们不允许用户复制和粘贴)
解决方案是:
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
都什么都不返回;
答案 0 :(得分:0)
在python中,列表是通过引用传递的。这意味着,如果您为函数提供列表,并且该函数使列表发生变化,则更改将反映在函数外部:
def modify(lst):
lst[0] = 1
myList = [4, 5, 6]
modify(myList)
myList # [1, 5, 6]
该函数不需要返回任何内容,因此return
仅返回任何内容,并且仅存在以尽早退出该函数。