代码见下:

#include<stdio.h>
int n, m, p[25];  //设置全局变量
void dfs(int u, int start) { //枚举第u个位置,可枚举的数字为从start到n
	int i;
	if (n - start < m - u) return; //剩下未使用的数字少于还需的数字,无符合条件的答案,退出
	if (u == m + 1) {              //m个位置都已确定,开始打印
		for ( i = 1; i <= m; i++) {
			printf("%d ", p[i]);
		}
		printf("\n");
		return;
	}
	for ( i = start; i <= n; i++) {    //枚举第u个位置
		p[u] = i;  //记录所选的数字
		dfs(u + 1, i + 1); //继续枚举下一个位置(为保证下一个数更大,从i+1开始枚举)
	}
}
int main() {
	scanf("%d %d", &n, &m);
	dfs(1, 1);   //递归起始点
	return 0;
}