Swift函数调用自身

Swift函数调用自身,swift,function,func,Swift,Function,Func,有人能解释为什么结果是2而不是3吗 func fib(n: Int) -> Int { return n < 2 ? n : (fib(n: n-1) + (fib(n: n-2)) } print(fib(n: 3)) func fib(n:Int)->Int{ 返回nInt{ 如果nInt{ 如果n

有人能解释为什么结果是2而不是3吗

func fib(n: Int) -> Int {

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

}

print(fib(n: 3))
func fib(n:Int)->Int{
返回n<2?n:(fib(n:n-1)+(fib(n:n-2))
}
打印(fib(n:3))

让我们浏览一下您的代码

print(fib(n: 3))
这里,您要为
n
传入
3
。因为
3
小于
2
,所以三元运算符的后半部分将被计算:

///    1.             2.
return (fib(n: n-1) + (fib(n: n-2))
  • 对于
    fib(n:n-1)
    ,您将传递
    2
    For
    n
    2
    再次小于
    2
    ,因此
    返回(fib(n:n-1)+(fib(n:n-2))
    将另一次求值。这将转换为
    返回(fib(n:1)+(fib(n:0))
    ,它将成为
    返回(1+0)
  • 对于
    fib(n:n-2)
    ,您要传递
    1
    ,因为
    n
    1
    小于
    2
    ,所以返回值正好变成
    返回n

  • 1+1=2

    让我们浏览一下您的代码

    print(fib(n: 3))
    
    这里,您要为
    n
    传入
    3
    。因为
    3
    小于
    2
    ,所以三元运算符的后半部分将被计算:

    ///    1.             2.
    return (fib(n: n-1) + (fib(n: n-2))
    
  • 对于
    fib(n:n-1)
    ,您将传递
    2
    For
    n
    2
    再次小于
    2
    ,因此
    返回(fib(n:n-1)+(fib(n:n-2))
    将另一次求值。这将转换为
    返回(fib(n:1)+(fib(n:0))
    ,它将成为
    返回(1+0)
  • 对于
    fib(n:n-2)
    ,您要传递
    1
    ,因为
    n
    1
    小于
    2
    ,所以返回值正好变成
    返回n

  • 1+1=2

    首先,我们可以这样编写此函数,以便于理解:

    func fib(n: Int) -> Int {
        if n < 2 {
            return n
        }
        return fib(n: n-1) + fib(n: n-2)
    }
    
    func fib(n:Int)->Int{
    如果n<2{
    返回n
    }
    返回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

    首先,我们可以这样编写此函数,以便于理解:

    func fib(n: Int) -> Int {
        if n < 2 {
            return n
        }
        return fib(n: n-1) + fib(n: n-2)
    }
    
    func fib(n:Int)->Int{
    如果n<2{
    返回n
    }
    返回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

    您需要调试。它与SwiftUI无关,因此不需要该标记。首先,断开三元if,生成多行,使用中间变量并添加打印?您需要调试。它与SwiftUI无关,因此不需要该标记。首先,断开三元if,生成m多行,并使用中间变量和添加打印?