递归的函数
2017-02-08 23:23
176 查看
递归的函数
Time Limit: 1000MS Memory Limit: 65536KBSubmit 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
qinchuan01 | #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 |
相关文章推荐
- Linux下递归删除路径的函数
- 递归列出所有文件和目录 (函数)
- 一个递归小函数,用于组合树控件的文本
- 利用递归把多维数组转为一维数组的函数
- 利用游标实现递归(函数)
- 函数递归调用
- 函数:递归分类
- PHP递归创建目录函数
- [原创]用递归写的一个object 转换成JSON的函数
- 使用"函数递归"实现的树型菜单
- 使用函数递归实现基于php和MySQL的动态树型菜单
- 递归用函数、存储过程实现的效果
- Java 学习笔记 (10) - Java 函数的递归调用
- 使用函数递归实现基于php和MySQL的动态树型菜单
- 使用"函数递归"实现的树型菜单 (转)
- 关于Oracle中split函数的实现以及函数递归的举例。
- 利用递归把多维数组转为一维数组的函数
- 函数的递归调用
- 函数的递归调用
- 函数的递归和调用