FDS作业记录 · 复杂度分析

文章探讨了递归计算Fibonacci数列的时间复杂度(O(2^N)),并分析了两个程序P1和P2的时间复杂性,P1为O(logN),P2为O(N)。同时提及了空间复杂度的相关讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、

The Fibonacci number sequence {F_N​} is defined as: F_0​=0, F_1​=1, F_N​=F_N−1​+F_N−2​, N=2, 3, .... The time complexity of the function which calculates F_N​ recursively is Θ(N!).

T()

F()

说实话我还没法一眼看出来……姑且写一下这个函数:

#include <stdio.h>

int Fib (int n);

int main () {
	int n;
	scanf ("%d", &n);
	printf ("%d", Fib (n));
	return 0;
} 

int Fib (int n) {
	if (n == 0)
		return 0;
	else if (n == 1)
		return 1;
	else
		return Fib (n - 1) + Fib (n - 2);
}

分析该函数可知时间复杂度为 O(2^N),分析过程如下:

Fib(N) = Fib(N-1) + Fib(N-2) = [ Fib(N-2) + Fib(N-3) ] + [ Fib(N-3) + Fib(N-4) ] = ... ...

 可见括号内参数每减1,整体项数就会乘2,故当出现Fib(0)时,共有2^N项

故答案为F

PS:该函数的空间复杂度为O(N),因为有N层

2、

Let n be a non-negative integer re

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值