我试图为切片的索引分配一个值,但是每次我得到的索引超出范围时。我想我不太了解切片在Go中的工作原理,我理解切片的强大功能之一就是您无需声明固定长度,并且它是动态的,但是每次我尝试为索引分配一个值会出现运行时错误。
我尝试做备忘录:= make([] int,len),但是通过声明一个长度,它破坏了我检查len(memo)的代码的另一部分,并且似乎也使我无法理解为什么切片的目的很有用,因为它不需要初始长度吗?
var memo []int
func main() {
fmt.Println(fibMemo(10, memo))
}
// Memoized Solution
func fibMemo(n int, memo []int) int {
fmt.Println(n)
var result int
if len(memo) > n {
return memo[n]
}
if n == 1 || n == 2 {
result = 1
} else {
result = fibMemo(n-1, memo) + fibMemo(n-2, memo)
}
memo[n] = result
fmt.Println(memo[n])
return result
}
目标是使用备忘的解决方案打印出第10个斐波那契数字。尝试为备注切片的任何索引分配值时,出现运行时错误。