递归算法---输出第n个斐波那契数

  • 递归算法,就是按照某一包含有限步数的法则或公式对一个或多个前面的元素进行运算,以确定一系列元素(如数或函数)的方法。它的基本思想是把一个大问题拆分成数个小问题来逐个解决。在程序语言中表现为函数自己调用自己。
  • 斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、…前两项相加第三项,等于根据它的规律,可以得到它的数学公式:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3)

C语言递归实现求第n个斐波那契数:

#include <stdio.h>
int Fib(int N)
{
		//先设定结束递归的条件,由于数列的前2项都是1,故当传入的参数N小于3时,返回一个1。
		if (N <= 2)
			return 1;
		//如果传入的数大于等于3时,根据数学公式,通过递归调用,将当前的项转化为前两项的和。
		return Fib(N - 1) + Fib(N - 2);
	
}
int main()
{
	int n;
	printf("请输入一个数: \n");
	scanf("%d",&n);
	printf("第%d个斐波那契数为%d\n",n,Fib(n));
	return 0;
}

运行结果:
在这里插入图片描述
如果将传入的数值加大,比如输入40:
在这里插入图片描述
会发现结果并没有立即显示,程序会开始“思考“,等待了10S左右后才檀树弹出结果:在这里插入图片描述
这是由于要计算的数字很大,由于使用了递归,编译器要不断的重复计算,导致计算所需时间就变得很长,这也反映了递归算法的一个缺点:时间和空间的消耗大,计算效率低。所以,在实际应用中不推荐使用递归。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【问题描述】 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f求出斐波那契数列的第n,并在主函数中输出斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f求出斐波那契数列的第n,并在主函数中输出斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f求出斐波那契数列的第n,并在主函数中输出斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f求出斐波那契数列的第n,并在主函数中输出斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值