如何解决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))
- 对于
fib(n: n-1)
,您为2
传入n
。2
再次不小于2
,因此return (fib(n: n-1) + (fib(n: n-2))
再次计算。这将转换为return (fib(n: 1) + (fib(n: 0))
,它将变为return (1 + 0)
。 - 对于
fib(n: n-2)
,您为1
传入n
。1
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 举报,一经查实,本站将立刻删除。