不用递归编写函数计算从m选n的组合数?

来源:百度知道 编辑:UC知道 时间:2024/06/17 19:48:54
不能用递归函数啊

不用递归就用循环。从m选n的组合数为((m-n+1)/1)((m-n+2)/2)...(m/n),可以保存p,每次都让p乘(m-n+i)/i,i从1循环到n就得到了结果。注意((m-n+1)/1)...((m-n+i)/i)是从m-n+i选i的组合数,是一个整数,因此我们只需要用整形变量存储p,且得到的是精确值。

以下是样例C++程序:

unsigned comb(unsigned m, unsigned n)
{
unsigned p = 1;
for (unsigned i = 1, j = m - n + 1; i <= n; ++i, ++j) {
p *= j;
p /= i;
}
return p;
}

有人为你做好了,这是我搜集的一个不错的组合算法,需要了解算法可以参考:

#ifndef __btb_combination_hpp_def
#define __btb_combination_hpp_def

#include <algorithm>

namespace btb
{
////////////////////////////////////////////////////////////////////
// combination for STL permutation
//
// init_combination (first, middle, last)
// adjust_combination (first, middle, last)
// combinati