一 概述
斐波那契数列(Fibonacci sequence),又称黄金分割数列。该数列是指递归方法定义为:
F(0) = 0,F(0) = 1,F(n) = F(n-1) + F(n-2) (n ≥ 2,n ∈ N*) 的数列。
具体表现形式为:0,1,1,2,3,5,8,13,21,34...
二 函数的具体表现形式
int fibonacci(int N) {
if (N == 1 || N == 2) return 1;
return fibonacci(N-1) + fibonacci(n-2);
}
可以将该数列问题通过树的结构来拆解问题:
根据该树结构可知,当我们需要计算f(20)的时候,我们就需要先计算f(19)和f(18),且按这种方式类推。最后当遇得到f(1) 或者f(2)的时候,结果就已知,所以能够直接返回结果,递归树就结束了。
时间复杂度:由于子问题的个数是递归树中结点的总数,二叉树的结构为指数级的,所以子问题的个数为O(2^n)。
由于每此解决一个子问题,只是需要进行f(n-1) + f(n-2)的一个加法操作,时间为O(1)。
所以这个算法的时间复杂度为O(2^n)。
空间复杂度:由于该递归算法没有额外空间的使用,所以空间复杂度为O(1)。
待续....