排列、组合问题是大家再熟悉不过,通过公式可以轻而易举地求出C(n, m)、P(n, m),本文
将就组合问题介绍一些在时间复杂度和空间复杂度上去对程序进行优化的方法。
地球人都知道C(n, m) = C(n – 1, m – 1) + C(n – 1, m),根据这个递归性质,用C++
程序递归实现如下:
//
1.cpp
#include < iostream >
using namespace std;
int com( int n, int m)
... {
if(m == 0) return 1;
if(n == m) return 1;
return com(n - 1, m - 1) + com(n - 1, m);
}
int main()
... {
int a, b;
while(cin >> a >> b && (a != 0 || b != 0))
cout << com(a, b) << endl;
return
#include < iostream >
using namespace std;
int com( int n, int m)
... {
if(m == 0) return 1;
if(n == m) return 1;
return com(n - 1, m - 1) + com(n - 1, m);
}
int main()
... {
int a, b;
while(cin >> a >> b && (a != 0 || b != 0))
cout << com(a, b) << endl;
return