题解博客:1196:踩方格
ybt1196:踩方格
此题,我们可以用递推求解,那么,什么是递推,就让我们来认识一下:
1、什么是递推
• 递推是按照一定的规律来计算序列中的每个项,通常是通过计算前面的一些项来得出序列
中的指定项的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该
算法利用了计算机速度快和不知疲倦的机器特点。
• 递推算法是一种简单的算法,即通过已知条件,利用特定递推关系得出中间推论,直至得
到结果的算法。
• 递推算法分为顺推和逆推两种。
• 顺推法
• 所谓顺推法是从已知条件出发,逐步推算出要解决的问题的方法叫顺推。
如斐波拉契数列,设它的函数为f(n),已知f(1)=1,f(2)=1;f(n)=f(n-2)+f(n-1)(n>=3,n∈N)。
则我们通过顺推可以知道,f(3)=f(1)+f(2)=2,f(4)=f(2)+f(3)=3……直至我们要求的解。
• 逆推法
• 所谓逆推法从已知问题的结果出发,用迭代表达式逐步推算出问题的开始的条件,即顺推
法的逆过程,称为逆推。
思路分析:1.根据题目要求画图(图如下);
2.根据图,我们可以看出,n(步数)=1时;方案数是2,n=2,方案数是7;继续画,n=3;方案数是17;以此类推;
3.根据2,我们可以推导出递推公式:当n>=3时:n=n-2+n-1*2;(公式图如下)
画图图片:
公式图片:
参考代码:
#include <iostream> #include <cstdio> using namespace std; int a[21]; int main() { int n,i; scanf("%d",&n); a[1]=3; a[2]=7; for(i=3;i<=n;i++) { a[i]=a[i-1]*2+a[i-2]; } printf("%d",a[n]); }