蓝桥杯-试题 算法训练 瓷砖铺放-c++递归

瓷砖铺放

题目
资源限制时间限制:1.0s 内存限制:512.0MB
问题描述  
有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?

例如,长度为4的地面一共有如下5种铺法:
  4=1+1+1+1
  4=2+1+1
  4=1+2+1
  4=1+1+2
  4=2+2
  

编程用递归的方法求解上述问题。输入格式,只有一个数N,代表地板的长度输出格式。输出一个数,代表所有不同的瓷砖铺放方法的总数

思路:

一开始,我想在递归里用一个for循环来取1和2,但是最后没写出来。后来又读了一遍题目,发现这题只是让你输出最后的种数,并没有输出每种方法的组合,于是只需要对递归的出口和递归的1和2分别顺序执行即可,采用正序递归,从0开始。

c++代码:

//蓝桥杯-瓷砖铺路-2020/04/20
#include<iostream>
using namespace std;
int n;//瓷砖的长度
int ret = 0;//统计方案数
//递归
void dfs(int t){
   //如果当前层大于n,则退出
   if (t > n)
    return;
   //当前层等于n,计数
   if (t == n){
    ret++;
    return;
   }
   //递归+1的
   dfs(t + 1);
   //递归+2的
   dfs(t + 2);
}
int main()
{
   cin >> n;
   //从0开始递归
   dfs(0);
   cout << ret << endl;
   return 0;
}

由于博主一开始用for循环来取1和2,没写出来。参考了网上的代码,发现自己菜的扣jio。希望此文对大家认识递归有所帮助吧!

猜你喜欢

转载自blog.csdn.net/qq_43431171/article/details/105642489