问题描述
谁能解释为什么结果是 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
。