微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift 函数调用自身

如何解决Swift 函数调用自身

谁能解释为什么结果是 2 而不是 3?

func fib(n: Int) -> Int {

   return n < 2 ? n : (fib(n: n-1) + (fib(n: n-2))

}

print(fib(n: 3))

解决方法

让我们来看看你的代码。

print(fib(n: 3))

在这里,您为 3 传入 n。因为3小于2,所以计算三元运算符的后半部分:

///    1.             2.
return (fib(n: n-1) + (fib(n: n-2))
  1. 对于 fib(n: n-1),您为 2 传入 n2 再次小于 2,因此 return (fib(n: n-1) + (fib(n: n-2)) 再次计算。这将转换为 return (fib(n: 1) + (fib(n: 0)),它将变为 return (1 + 0)
  2. 对于 fib(n: n-2),您为 1 传入 n1 is 小于 2,因此返回值变为 return n

1 + 1 = 2

,

首先,我们可以这样写这个函数,让它更容易理解:

func fib(n: Int) -> Int {
    if n < 2 {
        return n
    }
    return fib(n: n-1) + fib(n: n-2)
}

所以,当我们传入 3 作为参数时,它会返回 fib(2) + fib(1)

这里fib(2)会返回fib(1) + fib(0),也就是1 + 0 = 1;而 fib(1) 将返回 1

因此,最终结果将是 1 + 1 = 2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。