嗨这个函数采用一些整数的数组,我的目标是有一个只有正整数的新数组 . 但是,我一直得到同样的错误说恐慌:运行时错误:索引超出范围
任何人都可以帮帮我.. ??
func domath(newarray[] int, i int, array[] int)([]int){
if i < len(newarray) {
if newarray[i] < 0{
i ++
domath(newarray, i, array)
}
if newarray[i] >= 0 {
array = append(array, newarray[i])
i ++
domath(newarray, i, array)
}
}
return array
}
2 回答
该实现的问题在于它在第一个if块内递增i然后使用new i值在第二个if块上检查newarray [i]> = 0,所以当你调用domath(a,x,b)时x = len(a)-1它试图执行newarray [x 1](即newarray [len(newarray)])超出范围 .
你可能想要写下这样的东西:
您的算法的简化版本可能是:
然而,您可能应该使用更像惯用的实现,如下所示,它也会更快:
你想写一个递归函数吗?你可以在下面看到我的代码:
}