具有中间结果的因子 - Swift playgrounds - 索引超出范围错误

时间:2017-12-02 03:06:18

标签: swift factorial

看着这个太长时间失明了。无法发现错误。 使"索引超出范围"调用函数时出错factorialIntermediateResults(n: 4)希望有人能用新眼睛看一看并帮我发现错误。谢谢!

func factorialIntermediateResults(n: Int) -> [Int] {
    if n == 0 || n == 1 { return [1] }
    var results = [Int]()
    doAllFactorials(n, &results, 0)
    return results
}

func doAllFactorials(_ n: Int, _ results: inout [Int], _ level: Int) -> Int {
    if n > 1 {
        results[level] = n * doAllFactorials(n-1, &results, level+1)
        return results[level]
    } else {
        results[level] = 1
        return 1
    }
}

factorialIntermediateResults(n: 4)

1 个答案:

答案 0 :(得分:3)

results是一个空数组,但您尝试访问值而不先添加值。

最简单的解决方案可能是用零预先填充数组。

var results: [Int] = Array(repeating: 0, count: n)