首页 > 解决方案 > Python中的递归:超过最大深度

问题描述

我很困惑如何在 python 中进行递归,何时返回以及何时更新全局变量。

考虑这个问题:https ://leetcode.com/problems/nested-list-weight-sum-ii/

给定一个嵌套的整数列表,返回列表中所有整数按其深度加权的总和,其中叶级整数的权重为 1,根级整数的权重最大。

Input: [[1,1],2,[1,1]]

这是我的解决方案:

class Solution:

    def depthSumInverse(self, nestedList: List[NestedInteger]) -> int:

        md = 0

        def maxdepth(nestedList, m):

            for i in nestedList:

                 if i.isInteger() == False:
                     md = max (m + 1, md)
                     maxdepth(nestedList, m+1)

            return md


        def depthSum(nestedList, maxdepth):

            s = 0

            for i in nestedList:
                t = i.isInteger()
                if t:
                    s += i.getInteger() * maxdepth
                else:
                    s += depthSum(i.getList(), maxdepth-1)

            return s

        m = maxdepth(nestedList, 1)

        return depthSum(nestedList, m)

递归错误:超出最大递归深度。

在这里更新 md 时如何进行递归?

标签: pythonrecursion

解决方案


一方面,我想说在这部分的最后一行

    def maxdepth(nestedList, m):

        for i in nestedList:

             if i.isInteger() == False:
                 md = max (m + 1, md)
                 maxdepth(nestedList, m+1)

你可能想做

                 maxdepth(i, m+1)

取而代之的是,否则您将只是不断地调用maxDepth原始输入列表,而实际上没有遍历嵌套列表的层次结构。


推荐阅读