1. 程式人生 > >演算法訓練 瓷磚鋪放

演算法訓練 瓷磚鋪放

問題描述   有一長度為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

#include <stdio.h>

// 列舉1,2兩種可能,如果長度超出n就是達到遞迴的邊界,等於n就是一種解
int n; int cnt; void f(int k) { if(k > n) return ; if(k == n) cnt ++; f(k+1); f(k+2); } int main() { scanf("%d", &n); f(0); printf("%d", cnt); return 0; }