递推(持续更新)

例1:求出前20个Fibonacci数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。 [1]

有递推式的题目用数组都很好解决;因为数组可以记录算过的数组而且有索引于地推式对应
我们有
f [ 1 ] = 0 f[1]=0 f[1]=0
f [ 1 ] = 1 ; f[1]=1; f[1]=1;
当i>=2时有 f [ i ] = f [ i − 1 ] + f [ i − 2 ] f[i]=f[i-1]+f[i-2] f[i]=f[i1]+f[i2]
于是

#include<stdio.h>
int main()
{
	int n;
	printf("请输入你要求多少项Fibonacci数列");
	scanf_s("%d", &n);
	int f[1000];
	for (int i = 1;i <= n;i++)
	{
		if (i == 1)
		{
			f[i] = 0;
		}
		if (i == 2)
		{
			f[i] = 1;
		}
		if (i > 2)
		{
			f[i] = f[i - 1] + f[i - 2];
		}

	}
	for (int i = 1;i <= n;i++)
	{
		printf("%d\n",f[i]);
	}

}

f[1].f[2]写在外边比较好,写在里面更加符合表达式,但是效率会低一些;

例二 生兔子问题

有一只兔子,从出生后第3个月每个月都生一只兔子,小兔子长到第2个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?

书上说:本题实际就是Fibonacci数列问题;但是没做解释a
我们来分析一下。我认为我们应该具分析问题的能力,而不是单单记住答案
分析:我们要算的是兔子的总数
一共有3种兔子
三个月及以上的兔子a[n]
二个月的兔子b[n]
一个月的兔子c[n]

s[n]=a[n]+b[n]+c[n];
a[n]=a[n-1]+b[n-1] (二个月的兔子长大了)
b[n]=c[n-1];
c[n]=a[n]
则我们可以得到兔子总数
s[n]=a[n]+b[n]+c[n]
=a[n-1]+b[n-1]+c[n-1]+c[n]
=s[n-1]+a[n]
=s[n-1]+a[n-1]+b[n-1]
=s[n-1]+a[n-2]+b[n-2]+c[n-2]
=s[n-1]+s[n-2];
所以说就是斐波那契数列;

#include<stdio.h>
int main()
{
	int n;
	printf("请输入你要求多少项Fibonacci数列");
	scanf_s("%d", &n);
	int f[1000];
	for (int i = 1;i <= n;i++)
	{
		if (i == 1)
		{
			f[i] = 0;
		}
		if (i == 2)
		{
			f[i] = 1;
		}
		if (i > 2)
		{
			f[i] = f[i - 1] + f[i - 2];
		}

	}
	for (int i = 1;i <= n;i++)
	{
		printf("%d\n",f[i]);
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值