学了编程的,都对递归函数不陌生吧,那让我们看看下面这个递归函数W(a, b, c):


你闭着眼睛就能写出个递归函数来,那就试试看。。

输入格式

第一行为整数N,接下来为N行测试数据,每行有三个整数a, b, c

输出格式

输出格式为W(a, b, c) = x。注意=号左右的空格和a, b, c间的空格!

样例输入

5
1 1 1
2 2 2
40 40 40
-1 -1 -1
7 6 5

样例输出

W(1, 1, 1) = 2
W(2, 2, 2) = 4
W(40, 40, 40) = 1048576
W(-1, -1, -1) = 1
W(7, 6, 5) = 123


#include<stdio.h>
#include<string.h>
int w[21][21][21];
int fun(int a,int b,int c) {
	if(a<=0||b<=0||c<=0) {
		return 1;
	} else if(a>20||b>20||c>20) {
		return fun(20,20,20);
	} else if(a<b&&b<c) {
		return fun(a,b,c-1)+fun(a,b-1,c-1)-fun(a,b-1,c);
	} else {
		return fun(a-1,b,c)+fun(a-1,b-1,c)+fun(a-1,b,c-1)-fun(a-1,b-1,c-1);
	}
}
int main() {
	int n,a,b,c,i,j,k;
	for(i=0; i<=20; i++) 
		for(j=0; j<=20; j++) 
			for(k=0; k<=20; k++) 
				if(i == 0 || j == 0 || k == 0)
					w[i][j][k] = 1;
	for(i=0; i<=20; i++) 
		for(j=0; j<=20; j++) 
			for(k=0; k<=20; k++){
				if(i > 0 && j > 0 && k > 0) {
					if(i < j && j < k)
						w[i][j][k] = w[i][j][k-1] + w[i][j-1][k-1] - w[i][j-1][k];
					else 
						w[i][j][k] = w[i-1][j][k] + w[i-1][j-1][k] + w[i-1][j][k-1] - w[i-1][j-1][k-1];	
				}
			}
	scanf("%d",&n);
	while(n--) {
		scanf("%d%d%d",&a,&b,&c);
		printf("W(%d, %d, %d) = ",a,b,c);
		if(a <= 0 || b <= 0 || c <= 0)
			a = b = c = 0;
		if(a > 20 || b > 20 || c > 20)
			a = b = c = 20;
		printf("%d\n",w[a][b][c]);
	}
	return 0;
}