为什么这个Go递归代码这么慢?(也需要比Python多10倍的内存)

2024-04-19 18:01:36 发布

您现在位置:Python中文网/ 问答频道 /正文

在leetcode上比较相同的算法speed-on-Go,PHP,Ruby,JS,Python。一般来说,Go是一个冠军,它的速度是Python的20倍,占用的内存更少。但当我解决这个任务时,我发现这个Go解决方案最容易产生资源。它需要很多时间和记忆。在

请解释一下为什么会这样。可能是我在当前递归解决方案中执行了一些资源贪婪的代码?在

Go:104毫秒,137.9 MB

func sortedArrayToBST(nums []int) *TreeNode {
    if 0 == len(nums){
        return nil
    }
    mid := len(nums)/2
    return  & TreeNode{Val: nums[mid], Left: sortedArrayToBST(nums[0:mid]), Right: sortedArrayToBST(nums[mid+1:])  }
}

Python:84毫秒,16.2 MB

^{2}$

JS:72毫秒,37.6 MB

var sortedArrayToBST = function(nums) {
    if( 0 == nums.length) return null;
    let middle = parseInt(nums.length/2)
    let ans = new TreeNode(nums[middle])
    ans.left = sortedArrayToBST(nums.slice(0,middle))
    ans.right = sortedArrayToBST(nums.slice(middle+1))
    return ans;
};

下面是递归任务的标准快速执行示例:https://gist.github.com/lbvf50mobile/15751618dd514385b2dd601155a3aca9


Tags: httpscomgomiddlereturnjsmb资源