美文网首页
神奇数列---斐波那契数列

神奇数列---斐波那契数列

作者: 雪中夜归人 | 来源:发表于2019-10-11 16:45 被阅读0次

  斐波那契数列数列(Fibonacci sequeuece),又称黄金分割数列、兔子数列,指的是这样一个数列:1、1、2、3、5、8、13、21、34、 .......
  在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
  关于该数列的代码实现实际上是有三种方式:(目前只学会了两种比较简单的)

实现一

///  最慢的一种方式  时间复杂度 O(2^n)
/// @param n 下标
+ (NSInteger)slowFibonacciValueWithIndex:(NSInteger)n
{
    if (n == 0 || n == 1) {
        return n;
    }
    return [self slowFibonacciValueWithIndex:n - 1] + [self slowFibonacciValueWithIndex:n - 2];
}

  这种方式的实现是最直接的一种方式,但是时间复杂度是O(2^n),当数据规模在计算第40 以后结果时,其运行速度已经很慢了。

实现二

/// 一般的一种方式  时间复杂度O(n)
/// @param n 下标
+ (NSInteger)normalFibonacciValueWithIndex:(NSInteger)n
{
    if (n == 0 || n == 1) {
        return n;
    }
    
    NSInteger first = 0;
    NSInteger second = 1;
    
    for (NSInteger i = 2; i <= n; i++) {
        NSInteger sum = first + second;
        first = second;
        second = sum;
    }
    return second;
}

  这种方式其实也很容易理解,而且时间复杂度是O(n)级别的。相对来说还是不错的。一般掌握这两种就基本够用了。当然第三种方式时间复杂度是O(logn)级别的,算法速度更快,但是也最不容易理解。此处附上第三种方式,有心人可以继续研究研究

求斐波那契数列的三种方法

相关文章

网友评论

      本文标题:神奇数列---斐波那契数列

      本文链接:https://www.haomeiwen.com/subject/vcgtmctx.html