递归算法求解斐波那契数列,C语言小白入门!

本文介绍了斐波那契数列的递推公式及其在C语言中的实现,指出递归方法的时间复杂度为O(2^n),并讨论了重复计算问题。文章提倡使用动态规划或矩阵快速幂等方法提高算法效率,提供了获取前n位数列的修改代码。
摘要由CSDN通过智能技术生成

斐波那契数列,也被称为黄金分割数列,是由意大利数学家列昂纳多·斐波那契提出的。这个数列从第三项开始,每一项都等于前两项之和,具体为:0、1、1、2、3、5、8、13、21、34……

斐波那契数列的递推公式为:

f\left ( n \right )= \left\{\begin{matrix} 0, &n=0 & \\ 1,& n=1 & \\ f\left ( n-1 \right ) +f\left ( n-2 \right ),&n>1 & \end{matrix}\right.

知道公式后,写递推代码就很简单啦

#include <stdio.h>

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

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

这个斐波那契数列的递归求解算法的时间复杂度是指数级的。具体来说,它的时间复杂度是 O(2^n)。这是因为对于每一个 n,算法都会递归地计算 fibonacci(n-1) 和 fibonacci(n-2),而这两个递归调用又会分别产生它们自己的递归调用,以此类推。

这种递归方式导致了大量的重复计算。例如,为了计算 fibonacci(5),我们需要计算 fibonacci(4) 和 fibonacci(3)。在计算 fibonacci(4) 时,我们又需要计算 fibonacci(3) 和 fibonacci(2)。这里 fibonacci(3) 就被重复计算了。随着 n 的增大,这种重复计算的数量会急剧增加,导致算法的效率非常低。

递归树的深度(也就是计算斐波那契数的递归调用次数)是 n,但在每一层递归中,我们都在做两个递归调用,这导致总的计算量按指数级增长。

对于大的 n 值,这种递归方法是非常低效的。在实际应用中,通常会使用动态规划(非递归)或矩阵快速幂等方法来避免重复计算,从而提高算法的效率。这个在本专栏的其他文章中有写到,欢迎阅读:http://t.csdnimg.cn/j9gJh

上述是求对应位置的斐波那契数,如果想要直接获得前XX位斐波那契数列,可以对代码进行如下修改:

#include <stdio.h>

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

int main(){
	int n;
	scanf("%d",&n);
	for(int i=0;i<=n;i++){
		printf("%d ",fibonacci(i));
	}
	return 0;
}

输入10,则输出结果为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fno.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值