一道递归的好题

简介: <p>题目描述:</p> <p>设整型数组A中有n个元素,输出从这n个数中取出的k个数的所有组合(k<=n)。例如:若A中存放的数是1,2,3,4,5,k为3,则输出结果应为:123,124,125,134,135,145,234,235,245,345</p> <p>题目分析:</p> <p>从数组A中选出K(本题中k=3)个元素,为了避免重复和泄漏,可分别求出包括A[0]和

题目描述:

设整型数组A中有n个元素,输出从这n个数中取出的k个数的所有组合(k<=n)。例如:若A中存放的数是1,2,3,4,5,k为3,则输出结果应为:123,124,125,134,135,145,234,235,245,345

题目分析:

从数组A中选出K(本题中k=3)个元素,为了避免重复和泄漏,可分别求出包括A[0]和不包括A[0]的所有组合。即包括A[0]时,求出A[1...n]中取出k-1个数的所有组合,不包括A[0]时,求出A[1...n]中取出k个元素的所有组合。将这两种情况合到一起,就是最终的结果。

#include <stdio.h>
int b[3];
int a[]={1,2,3,4,5};
void comb(int i,int j,int k)
{
	if(k==0)
	{
		for(int m=0;m<3;m++)
			printf("%d",b[m]);
		printf("\n");
	}
	else if(i+k-1<5)
	{
		b[j++]=a[i];
		
	
		comb(i+1,j,k-1);//在里面了
		comb(i+1,j-1,k);//不在里面了	
	}
}

int main()
{
	comb(0,0,3);
	return 0;
}

输出结果:



大家可以思考,若要逆向输出,即本题输出543,542,541,532,531,521,432,431,421,321。算法该做怎样的调整呢?


---------------我是华丽的分割线-----------------------------------------------------------------------------------------------------------------------------------

#include <stdio.h>
int b[3];
int a[]={1,2,3,4,5};
void comb(int i,int j,int k)
{
	if(k==0)
	{
		for(int m=0;m<3;m++)
			printf("%d",b[m]);
		printf("\n");
	}
	else if(i-k+1>=0)
	{
		b[j++]=a[i];
		
	
		comb(i-1,j,k-1);//在里面了
		comb(i-1,j-1,k);//不在里面了	
	}

		

}

int main()
{
	comb(4,0,3);
	return 0;
}


输出结果:




目录
相关文章
|
3月前
|
存储 缓存 算法
动归和递归算法讲解
动归和递归算法讲解
|
4月前
|
Java Python
汉诺塔递归问题,递归思路详解
汉诺塔递归问题,递归思路详解
53 0
|
4月前
|
算法 Java 定位技术
【数据结构与算法】递归、回溯、八皇后 一文打尽!
【数据结构与算法】递归、回溯、八皇后 一文打尽!
|
机器学习/深度学习
青蛙跳台阶(递归)
青蛙跳台阶(递归)
83 0
|
算法
【算法思维训练-剑指Offer联名 二】递归与循环篇
【算法思维训练-剑指Offer联名 二】递归与循环篇
82 0
汉诺塔+小青蛙跳台阶---《递归》
汉诺塔+小青蛙跳台阶---《递归》
|
机器学习/深度学习 算法
算法刷题第十天:递归 / 回溯--1
时间复杂度:O(n+m),其中 n 和 m 分别为两个链表的长度。因为每次循环迭代中,l1 和 l2 只有一个元素会被放进合并链表中, 因此 while 循环的次数不会超过两个链表的长度之和。所有其他操作的时间复杂度都是常数级别的,因此总的时间复杂度为 O(n+m)。
82 0
算法刷题第十天:递归 / 回溯--1
|
C语言
【C】青蛙跳台阶和汉诺塔问题(递归)
【C】青蛙跳台阶和汉诺塔问题(递归)
115 0
【C】青蛙跳台阶和汉诺塔问题(递归)
【递归】青蛙跳台阶的变式题你还会吗?
【递归】青蛙跳台阶的变式题你还会吗?
115 0
【递归】青蛙跳台阶的变式题你还会吗?
|
算法 Java
【递归与回溯算法】汉诺塔与八皇后问题详解
文章目录 1 汉诺塔问题 1.1 汉诺塔问题概述 1.2 思路分析 1.3 代码实现(Java) 1.4 结果验证 2 八皇后问题 2.1 八皇后问题概述 2.2 思路分析 2.2.1 问题划分与分析 2.2.2 涉及到的数据结构分析 2.2.3 上下对角线与行列的关系 2.3 代码实现(Java) 2.4 结果验证
【递归与回溯算法】汉诺塔与八皇后问题详解