Swift-斐波那契数列

斐波那契数列也被称之为黄金分割数列,费波那契数列由0和1开始,之后的费波那契系数就由之前的两数相加,
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……
算法实现起来也比较简单:

func fibonacci(n:NSInteger)->NSInteger{
    if n<=0 {
        return 0
    }
    if n==1 || n==2 {
        return 1
    }
    return fibonacci(n-1)+fibonacci(n-2)
}

for index in 0...13 {
    print("FlyELephant-第\(index)项的值:\(fibonacci(index))")
}

上面的递归,如果设置为50就会感觉运行特别慢,所以斐波那契数列通过递归实现并不是特别好,还好可以循环来解决:

//0、1、1、2、3、5、8、13、21、34
    func fibonacci(n:Int) -> Int {
        if n <= 0 {
            return 0
        }
        
        if n == 1 {
            return 1
        }
        
        var firstNum:Int = 0
        var secondNum:Int = 1
        var result:Int = 0
        for _ in 2...n {
            result = secondNum + firstNum
            firstNum = secondNum
            secondNum = result
        }
        return result
    }

for index in 0...10 {
    print("第\(index)项结果:\(fbonacciLoop(index))")
}

青蛙与台阶

一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。青蛙跳上一个n级的台阶总共有多少种跳法,这是简单的斐波那契数列:

func jumpFloor(n:NSInteger)->NSInteger {
    if n<=0 {
        return 0
    }
    
    if n==1 {
        return 1
    }
    
    if n==2 {
        return 2
    }
    
    return jumpFloor(n-1)+jumpFloor(n-2)
}

for index in 1...10 {
    print("\(index)级台阶的跳法:\(jumpFloor(index))")
}

上面的题目还有一个变通问题,一只青蛙一次可以跳上1级台阶,也可以跳上2 级……也可以跳上n 级,青蛙跳上一个n级的台阶总共有多少种跳法?

简单的分析一下假设F(0)=1,那么
F(1)=1
F(2)=F(1)+F(0)
F(3)=F(2)+F(1)+F(0)
F(n-1)=F(n-2)+...+F(0)
F(n)=F(n-1)+F(n-2)+..F(0)
F(n)=2*F(n-1)
代码实现:

func jumpLoopFloor(n:NSInteger)->NSInteger {
    if n<=0 {
        return 0
    }
    
    if n==1 {
        return 1
    }
    
    return 2*jumpLoopFloor(n-1)
}

for index in 1...10 {
    print("\(index)级台阶跳法:\(jumpLoopFloor(index))")
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容