问题描述 有一长度为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,代表地板的长度 输出格式 输出一个数,代表所有不同的瓷砖铺放方法的总数 样例输入 4 样例输出 5
。昨天看了递归,这个也是递归,和整数分解为若干项之和差不多。
其实也不是dfs,是回溯,习惯这样而已。我有一点问题要注意,就是全局变量在函数有时候在主函数也定义了,容易出错,这个要注意。
#include<stdio.h>
int c
=0,n
;
void dfs(int s
){
if(s
==n
) c
++;
else if(s
>n
) return;
else {
int i
;
for(i
=1;i
<=2;i
++){
s
+=i
;
dfs(s
);
s
-=i
;
}
}
}
int main()
{
int i
,j
;
scanf("%d",&n
);
dfs(0);
printf("%d",c
);
return 0;
}