学了编程的,都对递归函数不陌生吧,那让我们看看下面这个递归函数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;
}