数据排列组合问题
li190 2003-12-25 09:44:16 n个自然数中r个数的组合,要求数不相同,递减排列。如:n = 5, r = 3, 所有组合为:
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
看到一本书上用递归法的程序如下:
#include <stdio.h>
//递归法
void comb( int n, int r )
{
int i;
for( i = n; i >= r; i-- )
{
//看不明白这一段,k如何在外部定义?
if(( i != n) && ( k != r )) //k为过程外定义的
{
int temp;
for( temp = 1; temp <= ( k - r ) * 3; temp++ )
printf(" ");
}
printf(" %3d", i );
if( r > 1 )
comb( i - 1, r - 1 ); //递推到i-1个数
else
printf(" \n");
}
}
main()
{
comb( 5, 3 );
}