算法训练 递归 瓷砖铺放

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

 1 #include<stdio.h>
 2 
 3 int n, num = 0;
 4 
 5 void fun(int x)
 6 {
 7     int a = x;
 8     //刚好铺满地面
 9     if (a == n)
10     {
11         num++;
12         return;
13     }
14     else if (a > n)
15     {
16         return;
17     }
18     //加一块长度为1的砖
19     fun(a + 1);
20     //加一块长度为2的砖
21     fun(a + 2);
22 }
23 
24 int main()
25 {
26     scanf("%d", &n);
27     fun(0);
28     //最初没有铺砖 总长度为0
29     printf("%d", num);
30     return 0;
31 }


 
原文地址:https://www.cnblogs.com/ZhengLijie/p/12667732.html