您的位置:首页 > 其它

递归的函数

2017-02-08 23:23 176 查看


递归的函数

Time Limit: 1000MS Memory Limit: 65536KB

Submit Statistic


Problem Description

给定一个函数 f(a, b, c):
如果 a ≤ 0 或 b ≤ 0 或 c ≤ 0 返回值为 1;
如果 a > 20 或 b > 20 或 c > 20 返回值为 f(20, 20, 20);
如果 a < b 并且 b < c 返回 f(a, b, c−1) + f(a, b−1, c−1) − f(a, b−1, c);
其它情况返回 f(a−1, b, c) + f(a−1, b−1, c) + f(a−1, b, c−1) − f(a-1, b-1, c-1)。
看起来简单的一个函数?你能做对吗?


Input

输入包含多组测试数据,对于每组测试数据:
输入只有一行为 3 个整数a, b, c(a, b, c < 30)。


Output

对于每组测试数据,输出函数的计算结果。


Example Input

1 1 1
2 2 2



Example Output

2
4



Hint

 


Author

qinchuan

01
#include<stdio.h>
02
 
03
int
 
x[31][31][31]={0};
04
int
 
f(
int
 
a, 
int
 
b, 
int
 
c)
05
{
06
    
if
(a
<= 0||b <= 0||c <= 0)
07
        
return
 
1;
08
    
else
 
if
(a>20||b>20||c>20)
09
        
return
 
f(20,20,20);
10
    
else
 
if
(x[a][b][c]) 
return
 
x[a][b][c];
11
    
else
 
if
(a<b&&b<c)
12
        
return
 
x[a][b][c]=f(a,b,c-1)+f(a,b-1,c-1)-f(a,b-1,c);
13
    
else
14
        
return
 
x[a][b][c]=f(a-1,b,c)+f(a-1,b-1,c)+f(a-1,
b, c-1)-f(a-1,b-1,c-1);
15
}
16
 
17
int
 
main()
18
{
19
    
int
 
a,b,c;
20
    
if
(a<30||b<30||c<30)
21
    
{
22
        
while
(~
scanf
(
"%d
%d %d"
,&a,&b,&c))
23
        
{
24
            
printf
(
"%d\n"
,f(a,b,c));
25
        
}
26
    
}
27
    
return
 
0
;
28
}
29
 
30
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 递归