算法训练 瓷砖铺放(递归)

it2022-05-05  186

问题描述   有一长度为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; }

最新回复(0)