由于1*2的骨牌拼成区域的面积始终为2的倍数,而矩阵的面积为3*n
可以推断出,该矩阵必定由且仅由3*2,3*4,…3*n(n为偶数)的不可分割的小矩阵构成,比如:
如上所示,可以看出:
n=2时有三种状态;
n>=4(n=4的情况没列完)有2种不可分割的状态(|_ … _|或对称的情形)。
可以得到递推式如下,其中a[n]中存储3*n对应的结果,初始化a[0]=1,a[n]=0(n不为0):
则 a[n] =3a[n-2]+2a[n-4]+2a[n-6]+…
a[n-2]=3a[n-4]+2a[n-6]+2a[n-8]+…
a[n]= -a[n-2]+4a[n-2]+2a[n-4]+2a[n-6]+…
a[n]-a[n-2]=-a[n-2]+4a[n-2]+2a[n-4]-3a[n-4]
化简可得a[n]=4a[n-2]-a[n-4],可知需要设初值a[0]=1,a[2]=3,n从4开始时可利用递推式求解。
实现如下:
#include <stdio.h>
int i = 4, n, a[31] = { 0 };
int main() {
for (a[0] = 1, a[2] = 3; i<31; ++i)
a[i] = a[i - 2] * 4 - a[i - 4];
while (scanf("%d", &n), n>-1)
printf("%d\n", a[n]);
system("pause");
return 0;
}