算法求助

han_meim · · 892 次点击
原因是golang是传值的, slice扩容时,指向的数组可能会变更。 index==4时, search的入参temp我们称为[temp4] 是[0, 3, 5, 7]。 当调用到leftArr := search(nums, index+1, append(temp, nums[index])) 这句话时, 因为 append操作,改变了temp的大小,所以作为一个新值[temp5]传入到第5层, temp5为[0, 3, 5, 7, 9]. 所以第5层返回值是[[0, 3, 5, 7, 9]], 在第4层中的leftArr为第5层的返回值。这时候temp5的生命周期结束。第4层接下来的逻辑,所使用的temp是temp4, 所以最后的返回值是[[0, 3, 5, 7, 9],[0, 3, 5, 7]]。 接下来是index==3时, leftArr = [[0, 3, 5, 7, 9],[0, 3, 5, 7]] 再往下执行算rightArr时,又开始递归index=4, nums中的下标为4的是9, 所以是[0 3 5] 后面加[9]变成[0 3 5 9] 比较绕, 想不通的,debug就清楚了
#6
更多评论
我没有仔细看呢,但是看结果应该是,切片是引用类型。数组才是基础类型。所以如果多个切片用了一个数组作为基础类型。那么基础类型的修改会影响到所有的引用。
#1
append会打散后添加
#2