考研复习 | 数据结构 / 斐波那契数列复杂度

本文详细探讨了考研备考期间的数据结构重点,包括斐波那契数列的递归和循环实现,以及它们的时间复杂度分析。递归方法的时间复杂度讨论了二叉树观点和常见争议,循环方法则给出了O((1+5/2)^n)的复杂度。关键词涉及斐波那契数列、递归、循环、时间复杂度、考研复习。
摘要由CSDN通过智能技术生成

考研复习 | 数据结构 / 斐波那契数列复杂度

斐波那契数学表达式

F ( n ) = { 1 n = 0 , 1 F ( n − 1 ) + F ( n − 2 ) n > 1 F(n)=\left\{ \begin{array}{l} 1 & & {n=0,1}\\ F(n-1)+F(n-2) & & {n>1} \end{array} \right. F(n)={1F(n1)+F(n2)n=0,1n>1

递归方法

C++代码

int recursion(int n) {
    int result;
    if (n <= 1)
        result = 1;
    else 
        result = recursion(n-1) + recursion(n-2);
    return result;
}

时间复杂度

关于斐波那契递归方法的时间复杂度我看了两篇文章, 也是网上主要的两种答案

  1. O ( 2 n ) O(2^n) O(2n)

参考这篇博客 提到的, 以二叉树展开斐波那契数列, 那么时间复杂度就是节点个数 2 n 2^n 2n , 但是有个问题就是, 其实这个不是满二叉树, 所以有了第二个答案.

循环方法

C++ 代码

int cycle(int n) {
	int result;
	if (n <= 1) {
		result = 1;
	}
	else {
		int i, a, b;
		a = 1;
		b = 1;
		for(i = 2; i <= n; i++) {
			result = a + b;
			b = result;
			a = result - a;
		}
	}
	return result;
}

时间复杂度

  1. O ( ( 1 + 5 2 ) n ) O((\frac{1+\sqrt5}{2})^n) O((21+5 )n)

这个答案参考知乎用户SleepyBag 的推导, 由于能力有限, 刚开始复习, 只能勉强看懂第一种方法. 两种方法都是证得
T ( n ) ∈ O ( F ( n ) ) T(n) \in O(F(n)) T(n)O(F(n))
其中 T ( n ) T(n) T(n) 为时间复杂度, F ( n ) F(n) F(n) 为斐波那契数列通项公式.

斐波那契通项公式相关推导 得到数列中第 n n n 个数为:
a n = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] a_n=\frac{1}{\sqrt5}\left[\left(\frac{1+\sqrt5}{2}\right)^n-\left(\frac{1-\sqrt5}{2}\right)^n\right] an=5 1[(21+5 )n(215 )n]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值