c语言---c语言中的斐波那契数列程序

首先就要先了解何为斐波那契数列---斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(≥ 2,∈ N*)

简而言之,如果发现有类似1、1、2、3、5、8、13、21、34、……就是前两个数之和等于接下来的这个数这样的规律,不妨考虑它是不是斐波那契数列。

而在c语言中解决关于斐波那契数列编程的最常用方法就是:循环或者递归函数了。

就最经典的兔子繁殖问题:若一对成年兔子每个月恰好生下一对小兔子,一雌一雄,在年初时只有一对小兔子,在第一个月结束时,他们成长为成年兔子,并且第二个月结束时,这对成年兔子将生下一对小兔子,这种成长与繁殖的过程会一直持续下去,并假设生下的小兔子不会死,那么10个月之后共可有多少对兔子?

如题目而言:

第一个月:1对(幼儿);

第二个月:1对(成年);

第三个月:1对(成年)-->1对(幼儿) 共 2对;

第四个月:1对(成年)-->1对(幼儿),1对(幼儿)共3对;

第五个月:1对(成年)-->1对(幼儿),1对(成年)-->1对(幼儿),1对(幼儿)共5对;

.......

月份123456...
兔子的对数112358...

由此规律,我们发现这是一个典型的斐波那契数列,即可考虑用递归函数编写程序。

程序如下:

#include<stdio.h>

int f(int n)//因为要返回数值,所以要一个int型函数
{
	if (n <= 2)
		return 1;//n<=2时,兔子的对数都是1对
	else
		return f(n - 1) + f(n - 2);//斐波那契数列编程中最经典最有意思的递归思想;
}
int main()
{
	int n = 10;//题目问的是10个月的兔子对数,即设给n赋值为10,不同问题中不同月数,完全由你自定义
	int ret = f(n);//创建f(n)函数并赋值给ret;
	printf("%d\n", ret);
	return 0;
}

类似的斐波那契数列思路的题还有有趣的走台阶问题;可以一起看一下。

某人走n阶台阶,由于他腿比较长,每次可以选择走一阶或者两阶,问走n阶台阶一共有多少种走法?

也许我们第一眼看这题目还是很迷糊的,没有什么思路。

不妨来分析一下

例如n=3,则走法数为f(3-1)+f(3-2)=1+2=3;

又是熟悉的  F(n)=F(n - 1)+F(n - 2)(≥ 2,∈ N*),即本题也是可以用斐波那契数列及递归函数思路来编程(要注意的是n<=2时,走法数是1和2);

#include<stdio.h>

int fib(int n)
{
	if (n <= 2)
		return n;//n为1和2时,走法数分别是1和2,可以用return n来表示
	else
		return fib(n - 1) + fib(n - 2);//斐波那契+递归
}
int main()
{
	int n = 0;//初始化n
	scanf("%d", &n);//自定义n的值
	int ret = fib(n);//创建一个fib(n)函数
	printf("%d", ret);
	return 0;
}

        总结:遇到类似的无法一时理解规律的题,可以举例或列表分析,若发现是 F(n)=F(n - 1)+F(n - 2)(≥ 2,∈ N*)类的题,考虑斐波那契+递归思路。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值