Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 另一个func中的递归会导致错误访问_Recursion_Swift - Fatal编程技术网

Recursion 另一个func中的递归会导致错误访问

Recursion 另一个func中的递归会导致错误访问,recursion,swift,Recursion,Swift,我有以下代码: func pi() -> Double { func iteration(denominator: Double) -> Double { let nextNumber: Double = 1.0 / denominator let isPreciseEnough = abs(nextNumber) < 0.0002 if isPreciseEnough { return next

我有以下代码:

func pi() -> Double {
    func iteration(denominator: Double) -> Double {
        let nextNumber: Double = 1.0 / denominator
        let isPreciseEnough = abs(nextNumber) < 0.0002

        if isPreciseEnough {
            return nextNumber
        }
        let newDenominator = (abs(denominator) + 2.0) * denominator / abs(denominator) * -1.0
        return nextNumber + iteration(newDenominator)
    }
    return 4.0 * iteration(1.0)
}
func pi()->Double{
func迭代(分母:Double)->Double{
设nextNumber:Double=1.0/分母
设isPreciseEnough=abs(下一个编号)<0.0002
如果我看不到{
返回下一个编号
}
设新分母=(abs(分母)+2.0)*分母/abs(分母)*-1.0
返回下一个编号+迭代(新分母)
}
返回4.0*迭代(1.0)
}
当我运行它的时候,它在操场上第二次运行时就停止了,当我试图在项目中构建它时,它停止了

“swift失败,退出代码为1”

我检查了分母的值,在第二次运行时它是2.23690525377983e-314。但是,当我分离的方法像

func pi() -> Double {
    return 4.0 * iteration(1.0)
}

func iteration(denominator: Double) -> Double {
    let nextNumber: Double = 1.0 / denominator
    let isPreciseEnough = abs(nextNumber) < 0.0002

    if isPreciseEnough {
        return nextNumber
    }
    let newDenominator = (abs(denominator) + 2.0) * denominator / abs(denominator) * -1.0
    return nextNumber + iteration(newDenominator)
}
func pi()->Double{
返回4.0*迭代(1.0)
}
func迭代(分母:Double)->Double{
设nextNumber:Double=1.0/分母
设isPreciseEnough=abs(下一个编号)<0.0002
如果我看不到{
返回下一个编号
}
设新分母=(abs(分母)+2.0)*分母/abs(分母)*-1.0
返回下一个编号+迭代(新分母)
}

它工作得很好。有人能解释一下,为什么上面的示例不起作用吗?

+1:我不知道在
func
中放置
func
是有效的,但编译器没有抱怨。我看到了与您相同的行为。当我在Xcode 6.1游乐场中尝试此操作时,在尝试递归调用
迭代时,我得到了一个编译错误:
本地函数无法引用它们自己
@MikeS我已经很晚了,但是如果您从注释中做出回答,我将接受它作为一个答案。