瓷砖铺放
题目
资源限制时间限制: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。希望此文对大家认识递归有所帮助吧!