函数题:求组合数(高效递归版)
请编写高效递归函数,求组合数。
#### 函数原型
c
double Cmb(int x, int y);
说明:x 和 y 为非负整数,且 x ≥ y ≥ 0,函数值为组合数 $$C_x^y$$。
要求:不要使用循环语句,不调用阶乘函数和排列数函数。找出最快的递推公式,该函数直接调用自己求得结果。
#### 裁判程序
c
#include <stdio.h>
double Cmb(int x, int y);
int main()
{
int m, n;
scanf("%d%d", &m, &n);
printf("%.10g\n", Cmb(m, n));
return 0;
}
/* 你提交的代码将被嵌在这里 */
#### 输入样例
in
4 2
#### 输出样例
out
6
#### 测试数据
<table>
<tr>
<td align="center"><b>输入样例</b></td>
<td align="center"><b>输出样例</b></td>
</tr>
<tr>
<td>0 0</td>
<td>1</td>
</tr>
<tr>
<td>5 0</td>
<td>1</td>
</tr>
<tr>
<td>34 17</td>
<td>2333606220</td>
</tr>
<tr>
<td>160 158</td>
<td>12720</td>
</tr>
<tr>
<td>1000 100</td>
<td>6.385051193e+139</td>
</tr>
</table>
答案:若无答案欢迎评论
#### 函数原型
c
double Cmb(int x, int y);
说明:x 和 y 为非负整数,且 x ≥ y ≥ 0,函数值为组合数 $$C_x^y$$。
要求:不要使用循环语句,不调用阶乘函数和排列数函数。找出最快的递推公式,该函数直接调用自己求得结果。
#### 裁判程序
c
#include <stdio.h>
double Cmb(int x, int y);
int main()
{
int m, n;
scanf("%d%d", &m, &n);
printf("%.10g\n", Cmb(m, n));
return 0;
}
/* 你提交的代码将被嵌在这里 */
#### 输入样例
in
4 2
#### 输出样例
out
6
#### 测试数据
<table>
<tr>
<td align="center"><b>输入样例</b></td>
<td align="center"><b>输出样例</b></td>
</tr>
<tr>
<td>0 0</td>
<td>1</td>
</tr>
<tr>
<td>5 0</td>
<td>1</td>
</tr>
<tr>
<td>34 17</td>
<td>2333606220</td>
</tr>
<tr>
<td>160 158</td>
<td>12720</td>
</tr>
<tr>
<td>1000 100</td>
<td>6.385051193e+139</td>
</tr>
</table>
答案:若无答案欢迎评论