gpt4 book ai didi

swift - Swift 4 中的尾递归(尾调用优化)

转载 作者:可可西里 更新时间:2023-11-01 01:07:29 28 4
gpt4 key购买 nike

我尝试在 Swift 中执行以下简单功能:

 func sum (n: Int, currentSum: Int = 0) -> Int {
return n == 0 ? currentSum :
sum(n: n-1,
currentSum: currentSum + n)
}

我预计编译器会使用尾递归优化。但是我陷入了(字面上的 :-P)堆栈溢出问题。

我是否需要设置任何标志以使编译器进行此类优化,我的代码有任何错误或此编译器优化不可用?

谢谢!

最佳答案

正如 Martin 指出的那样,除非您打开优化器 (-O),否则在任何情况下您都不会获得 TCO,但即使在那种情况下,也无法保证您会获得TCO,所以你真的不能依赖它。 Swift 对递归算法不是特别友好。通常你会这样写:

func sum(n: Int) -> Int {
return (1...n).reduce(0, +)
}

或者保持相同的计算模式(即从 n 倒数到 1):

func sum(n: Int) -> Int {
return (1...n).reversed().reduce(0, +)
}

关于swift - Swift 4 中的尾递归(尾调用优化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55011640/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com