在接收函数 return 数组时执行过多的错误?
Executing bad excess on receiving a function return array?
接收和执行以下函数有什么问题:
func FibFast(num: Int) -> Array<Int> {
var fib_arr = [Int](num)
if num < 1 {
fib_arr[0] = 0
return fib_arr
} else if num < 2 {
fib_arr[1] = 1
return fib_arr
}else {
for var i = 2; i < num; i++ {
fib_arr[i] = fib_arr[i-1] + fib_arr[i-2]
}
return fib_arr
}
}
当我尝试接收数组时:
var newArray = FibFast(10)
执行不当。
您正试图用不存在的索引下标数组,同样在您的其他情况下,您正试图在数组为空时下标到索引 2。
第 var fib_arr = [Int]()
行在整数上创建了一个空数组。当您使用 fib_arr[0] = 0
时,您试图将索引 0 处的值分配为 0,但当前不存在任何值。我建议使用 append(_)
方法,即。 fib_arr.append(0)
.
此外,当您将值 10 或任何大于等于 2 的值作为 num
参数传递时,您的 if-else if-else
语句正在执行您试图访问索引的 for 循环0
和 1
尚未设置为较早的语句,因为它们被 if-else if-else
块跳过而从未执行。
for 循环和下标赋值非常表明您可能在 swift 之前学习过另一种语言。您应该注意,您尝试使用的经典 c 风格 for 循环很快就会从 swift 中删除,因此最好养成不使用它的习惯。我已经按照您编写代码的方式重写了您的代码,如果您对此有任何疑问,请随时询问。
func fib(num: Int) -> [Int] {
var fib_arr = [Int]()
if num == 0 {
fib_arr.append(0)
} else if num == 1 {
fib_arr.append(0)
fib_arr.append(1)
} else {
fib_arr = [0, 1]
for i in 2..<num {
fib_arr.append(fib_arr[i - 1] + fib_arr[i - 2])
}
}
return fib_arr
}
Blake Lockley提出的答案也可以这样编码:
func FibFast(num: Int) -> Array<Int> {
var fib_arr = [Int]() // empty array
if num < 1 {
fib_arr += [0] // add element [0]
return fib_arr
} else if num < 2 {
fib_arr += [0] // add element [0]
fib_arr += [1] // add element [1]
return fib_arr
}else {
fib_arr = [0, 1] // init with [0, 1]
for var i = 2; i < num; i++ {
// add computed element
fib_arr += [fib_arr[i-1] + fib_arr[i-2]]
}
return fib_arr
}
}
接收和执行以下函数有什么问题:
func FibFast(num: Int) -> Array<Int> {
var fib_arr = [Int](num)
if num < 1 {
fib_arr[0] = 0
return fib_arr
} else if num < 2 {
fib_arr[1] = 1
return fib_arr
}else {
for var i = 2; i < num; i++ {
fib_arr[i] = fib_arr[i-1] + fib_arr[i-2]
}
return fib_arr
}
}
当我尝试接收数组时:
var newArray = FibFast(10)
执行不当。
您正试图用不存在的索引下标数组,同样在您的其他情况下,您正试图在数组为空时下标到索引 2。
第 var fib_arr = [Int]()
行在整数上创建了一个空数组。当您使用 fib_arr[0] = 0
时,您试图将索引 0 处的值分配为 0,但当前不存在任何值。我建议使用 append(_)
方法,即。 fib_arr.append(0)
.
此外,当您将值 10 或任何大于等于 2 的值作为 num
参数传递时,您的 if-else if-else
语句正在执行您试图访问索引的 for 循环0
和 1
尚未设置为较早的语句,因为它们被 if-else if-else
块跳过而从未执行。
for 循环和下标赋值非常表明您可能在 swift 之前学习过另一种语言。您应该注意,您尝试使用的经典 c 风格 for 循环很快就会从 swift 中删除,因此最好养成不使用它的习惯。我已经按照您编写代码的方式重写了您的代码,如果您对此有任何疑问,请随时询问。
func fib(num: Int) -> [Int] {
var fib_arr = [Int]()
if num == 0 {
fib_arr.append(0)
} else if num == 1 {
fib_arr.append(0)
fib_arr.append(1)
} else {
fib_arr = [0, 1]
for i in 2..<num {
fib_arr.append(fib_arr[i - 1] + fib_arr[i - 2])
}
}
return fib_arr
}
Blake Lockley提出的答案也可以这样编码:
func FibFast(num: Int) -> Array<Int> {
var fib_arr = [Int]() // empty array
if num < 1 {
fib_arr += [0] // add element [0]
return fib_arr
} else if num < 2 {
fib_arr += [0] // add element [0]
fib_arr += [1] // add element [1]
return fib_arr
}else {
fib_arr = [0, 1] // init with [0, 1]
for var i = 2; i < num; i++ {
// add computed element
fib_arr += [fib_arr[i-1] + fib_arr[i-2]]
}
return fib_arr
}
}