情况1与情况2之间的区别?

问题描述

我已经解决了这个问题,Convert Sorted Array

起初 我不知道最后要返回什么,所以我在给定的函数内创建了另一个函数来进行递归

**case 1**

def sortedArrayToBST(self,nums: List[int]) -> TreeNode:
    def bst(num_list):
        # base_case
        if len(nums) < 2:
            return TreeNode(nums[-1])

        # recursive_case
        mid = len(nums) // 2

        node = TreeNode(nums[mid])

        node.left = bst(nums[:mid])
        node.right = bst(nums[mid + 1:])

    ans = bst(nums)
    return ans

但是,结果一直给我“超过时间限制或递归的最大深度”。

然后,一旦我删除了内部的“ bts”函数,然后对给定函数(sortedArrayToBST)本身进行了相同的递归处理,错误就象魔术一样消失了。

**case 2**

def sortedArrayToBST(self,nums: List[int]) -> TreeNode:
    if not nums:
        return None
    
    if len(nums) == 1:
        return TreeNode(nums[-1])
        
        # recursive_case
    mid = len(nums) // 2
    
    node = TreeNode(nums[mid])
    
    node.left = self.sortedArrayToBST(nums[:mid])
    node.right = self.sortedArrayToBST(nums[mid + 1:])
        
    return node

但是,话虽如此,我看不出两个代码之间有什么区别。两者之间必须有一个关键的区别,但我自己无法解决

请问一下案例1和案例2之间的区别是什么,那么是什么导致一个错误而不是另一个错误

解决方法

在情况1中,经过处理的列表的长度不会在递归调用中减少,因为在bts的参数为num_list的同时,nums也在其主体中被处理。如果在num_list中处理了nums(而不是bts),错误将在情况1中消失。