题目描述
编写一个函数,求从n 个不同的数中取r 个数的所有选择的个数。
输入
输入n 和r 的值; 当用户输入0 0 时,程序结束。
输出
根据公式: C(n,r) = C(n, r-1) * (n - r + 1) / r 输出运算结果 输入数据不满足题意时候,输出"error!"
样例
输入
5 3
10 20
50 3
0 0
输出
10
error!
19600
这道题我有一个地方很迷糊,根据组合公式可以,但是我在代码中一进行优化就会超出内存,但是不优化,我想计算就不能得出正确的结果,但是可以在OJ上跑通,若有大佬,请给菜菜讲解一下,谢谢佬。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int combination(int n, int r)
{
if(r == 0) return 1;
return combination(n,r-1) * (n-r+1)/r;
}
int main()
{
int n, r;
while(1)
{
cin >> n >> r;
if( n==0 && r == 0) return 0;
// if(r > n / 2) r = n - r;
if(n < r) cout << "error!" << endl;
else cout << combination(n,r) << endl;
}
return 0;
}