c++递推详解

递推,顾名思义,就是从问题出发逐步推到已知条件的过程。递推算法的首要问题就是要先找到递推关系式,我们根据例题来看一下:

例题1:

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。

给出一个正整数a(a<100),要求菲波那契数列中第a个数是多少。

样例输入:6

样例输出:8

 思路:我们先来解读一下题意,我们知道斐波那契数列是1,1,2,3,5,8,13……他的每一个数都等于前两个数之和,然后我们就可以看一下样例输入,样例输入是6,根据上面的数列,我们很容易看出febnaqi数列的第六位是8了。

那么题目理解了,我们就可以看思路了:我们知道,如果定义3个变量让他们增加的话,非常的麻烦。于是我们可以用数组模拟febnaqi数列,遍历数组,挨个往上推算,最后算到数组的第n项不就可以了?如果你还不明白,可以借助Excll来理解一下:

 可是,重点来了,我们怎么知道数组的第几项是几呢?这就要用到递推的精髓:递推关系式

我们不难发现,这里的febnaqi数列的第一项是1,第二项是1,以后的每一项都等于他的前两项之和,然后我们就可以推出递推公式:a[i]=a[i-1]+a[i-2],就可以进行计算了。

  

那你也许还有疑惑,为什么要把a[1]和a[2]赋值为1呢?因为递推递推,他是需要开始的数据才能推演的,如果开始没有数就会无法推演。因为febnaqi数列的第一项和第二项都为1,所以这两个1就相当于开始数据,递推就是在开始数据的基础上进行推演的。

好了,知道了递推关系式,我们就可以把过程编出来了,首先我们要定义一个变量n和用于推演的a数组,然后输入n: 

int n,a[101];
cin>>n;

然后,我们要把a数组的第1项和第2项赋值为1:

a[1]=1;
a[2]=1;

接着到了最关键的一步,利用递推关系式给数组赋值:

for(int i=3;i<=n;i++){
   a[i]=a[i-1]+a[i-2];
}

最后输出a数组的第n项就可以了。下面是完整代码:

#include<iostream>
using namespace std;
int main(){
	int n,a[101];
	cin>>n; 
	a[1]=1;
	a[2]=1;
	for(int i=3;i<=n;i++){
		a[i]=a[i-1]+a[i-2];
	}
	cout<<a[n];
	return 0;
} 

关于递推,有一些题型是让你自己找数字中的规律,进而找出递推关系式,而还有些题是告诉你了递推关系式,让你自己去地推。但不管怎样,碰到递推的题一定要首先找到递推关系式,再解答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值