斐波那契数列Fibonacci问题
Posted evenleee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斐波那契数列Fibonacci问题相关的知识,希望对你有一定的参考价值。
斐波那契数列定义
Fibonacci array:1,1,2,3,5,8,13,21,34,...
在数学上,斐波那契数列是以递归的方法来定义:
- F(0) = 0
- F(1) = 1
- F(n) = F(n-1) + F(n-2)
用文字描述,就是斐波那契数列由0和1开始,之后的斐波那契系数就是由之前的两数之和想加而得,首几个斐波那契数列系数是:0,1,1,2,3,5,8,13,21,34,55,...特别指出:0不是第一项,而是第零项。
递归解法
最容易想到的解法是按照公式的递归解法,具体实现如下:
int fib(int n) { if (n < 2) return n; return fib(n-1) + fib(n-2); }
但其实该递归解法会重复两次计算 fib(n-2) 项,时间数量级远远超过 n,是指数级别的增长,时间复杂度很高,如下图所示,更因递归调用占用大量的堆栈空间,对程序而言是一种灾难。所以该种解法如果在面试中肯定是不能让面试官满意的。
顺序求和法
按照公式定义前开始的两项 a 和 b 为 0 和 1。后一项 c 是前两项之和,并且 a 和 b重新赋值,动态向右移动,时间复杂度为 O(n)。这种解法非常优秀!
int fib(int n) { if (n < 2) return n; int a = 0; int b = 1; int c = 0; for (int i = 1; i < n; ++i) { c = a + b; a = b; b = c; } return c; }
以上是关于斐波那契数列Fibonacci问题的主要内容,如果未能解决你的问题,请参考以下文章
[Python学习] 斐波那契数列 Fibonacci Sequence
python实现斐波那契数列(Fibonacci sequence)