C语言递归练习2

问题描述

从1到n(n < 1000)个自然数中选出r个数进行组合,并按指定的格式输出组合的结果。例如:

n=5、r=3 时,共有10种组合,运行程序,要按下面的格式输出:


1 2 3
      4
      5
   3 4
      5
   4 5
2 3 4
      5
   4 5
3 4 5


#include <stdio.h>

int n,r,flag;		/*flag=0 表示另起一行*/

void arrange(int s,int j)	/*从s开始选j个元素*/
{
	int i,k;
	for(i=s;i<= n-j+1;i++)
	{
		if(flag)
		{
			for(k=0;k<r-j;k++)
			{
				printf("  ");
			}
		}
		printf("%d ",i);
		flag=0;
		if(j > 1)
		{
			arrange(i+1,j-1);
		}
		else
		{
			putchar('
');
			flag=1;
		}
	}
}//arrange

int main()
{
	scanf("%d%d",&n,&r);
	while(n >=1000 || r > n)
	{
		printf("
Enter error,please enter again(n < 1000 && r < n)");
		scanf("%d%d",&n,&r);
	}
	flag=1;
	arrange(1,r);
	return 0;
}//main
原文地址:https://www.cnblogs.com/DismalSnail/p/10547818.html