• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Tiger123
博客园    首页    新随笔    联系   管理    订阅  订阅

题解博客: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]);
} 

 

 

 

posted @ 2022-05-09 18:51  い散落满天回忆的碎片  阅读(132)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3