Swift 中的嵌套递归函数

nested recursive function in swift

提问人:Morniak 提问时间:6/18/2014 更新时间:6/18/2014 访问量:7311

问:

我正在尝试执行嵌套递归函数,但是当我编译时,编译器崩溃(分段错误)。

这是我的代码:

func test()
{
    func inner(val : Int)
    {
        println("\(val)")
        if val > 0
        {
           inner(val - 1)
        }
    }
    inner(3)
}

编译器日志在这里

iOS 递归 函数式编程 Swift

评论

1赞 Christian Dietrich 6/18/2014
对我来说看起来像一个错误
1赞 Jack 6/18/2014
是的,提交错误报告,编译器不应该崩溃:p
0赞 Morniak 6/18/2014
我知道编译器不应该崩溃,但由于它是测试版,语法错误可能会引发这种错误。我的问题是:我的代码中是否有任何语法错误?OCaml 中有类似关键字的东西吗?rec
2赞 fqdn 6/29/2015
好消息!看起来这已在 Swift2 中修复 - 将原始代码(上面)放入 Xcode 7 beta 中的 playground 并调用该函数,按预期工作!:)test()

答:

19赞 fqdn 6/18/2014 #1

有趣。。。似乎在尝试捕获对它的引用时,它可能在被保释?inner

下面为我们修复了它:

func test() {
    var inner: (Int) -> () = { _ in }    // give it a no-op definition
    inner = { val in
        println("\(val)")
        if val > 0 {
            inner(val - 1)
        }
    }
    inner(3)
}

当然,如果没有嵌套,我们根本没有任何问题,例如,以下内容完全按预期工作:

func test(val: Int) {
    println("\(val)")
    if val > 0 {
        test(val - 1)
    }
}
test(3)

我会说:举报!

评论

0赞 Morniak 6/18/2014
该修复程序并不是真正的“性感”,但它可以完成等待官方修复的工作。谢谢!
0赞 E-Riddie 12/15/2014
声明数组时,不能在此解决方案中更改它们。如何正确声明它们?