递归求解几类排列组合问题(一、类循环组合排列)

对于搜索的深度很深或深度不固定的情况,则无法用枚举的方法来设置循环嵌套的层数,这时可以考虑用递归法来完成搜索任务。递归是一种常用算法,它是搜索的另一种实现方式。如果在算法设计中采用一个函数或过程直接或间接地调用它自身来解决问题的方法,则称该方法为递归算法。递归算法必须要设计好一个或若干个确定的递归终止条件。

一、类循环组合排列

Sample Input

4 2

Sample Output

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

#include<stdio.h>
int n,m,mat[10];
void solve(int l)
{
    if(l>=n)
    {
        for(int i=0;i<n;++i)
            printf("%d",mat[i]);
        puts("");
        return;
    }
    for(int i=0;i<m;++i)
    {
        mat[l]=i;
        solve(l+1);
    }
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        solve(0);
    }
    return 0;
}

递归求解几类排列组合问题(一、类循环组合排列)

时间: 2024-10-15 18:51:51

递归求解几类排列组合问题(一、类循环组合排列)的相关文章

递归求解几类排列组合问题(二、全组合排列)

对于搜索的深度很深或深度不固定的情况,则无法用枚举的方法来设置循环嵌套的层数,这时可以考虑用递归法来完成搜索任务.递归是一种常用算法,它是搜索的另一种实现方式.如果在算法设计中采用一个函数或过程直接或间接地调用它自身来解决问题的方法,则称该方法为递归算法.递归算法必须要设计好一个或若干个确定的递归终止条件. Sample Input 3 1 2 3 Sample Output 123 132 213 231 312 321 #include<stdio.h> #include<strin

递归求解几类排列组合问题(三、非重复组合排列)

三.非重复组合排列(含重复数字时,生成不重复组合排列) 对于搜索的深度很深或深度不固定的情况,则无法用枚举的方法来设置循环嵌套的层数,这时可以考虑用递归法来完成搜索任务.递归是一种常用算法,它是搜索的另一种实现方式.如果在算法设计中采用一个函数或过程直接或间接地调用它自身来解决问题的方法,则称该方法为递归算法.递归算法必须要设计好一个或若干个确定的递归终止条件. Sample Input 4 1 2 2 3 Sample Output 1223 1232 1322 2123 2132 2213

递归求解几类排列组合问题(四、普通选择性组合排列)

四.普通选择性组合排列 对于搜索的深度很深或深度不固定的情况,则无法用枚举的方法来设置循环嵌套的层数,这时可以考虑用递归法来完成搜索任务.递归是一种常用算法,它是搜索的另一种实现方式.如果在算法设计中采用一个函数或过程直接或间接地调用它自身来解决问题的方法,则称该方法为递归算法.递归算法必须要设计好一个或若干个确定的递归终止条件. Sample Input 5 3 1 2 3 4 5 Sample Output 123 124 125 134 135 145 234 235 245 345 #i

使用递归求解1 到最大的n位数

用求排列方法: 代码: #include<iostream> using namespace std; //使用递归求解1 到最大的n位数 void print(char * number){ bool isBegin = true; int length = strlen(number); for(int i = 0; i < length; i ++){ if(isBegin && number[i] != '0') isBegin = false; if(!isBe

UML类图及依赖,泛化,关联,聚合,组合,实现

UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 2) 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务.一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法). 3) 类的属性即类的数据职责,类的操作即类的行为职责 一.依赖关系(Dependence) 依

uva 12627 - Erratic Expansion(递归求解)

递归的边界条件写的多了--没必要写呢么多的.. 不明白可共同探讨~ #include<cstdio> #include<iostream> #include<cmath> using namespace std; long long dp(int kk,int pos) { int n=kk;int temp=(int)pow(2,n); // printf("%d %d\n",kk,pos); if(kk==0&&pos==1) r

递归求解二叉树任意一结点的深度

这个事最后一道大题的第一小题 让写个递归算法求解二叉树任意一结点的深度 首先应该去递归找到这个x结点,找到后然后再递归求解以x为根结点的子树的深度,所以我就很规矩(当然我觉得这样写比较明了)写了两个递归函数 当然首先还是得建立二叉排序树 另外注明:是用vs2010写的,没有在vc++6.0上面测试,如果朋友们发现在vc++上有bug,欢迎指出,供后来者看看 贴下自己的代码 //功能:递归算法,求二叉树中以元素值为x的结点为根的子树的深度 //时间:2014-11-23 #include <ios

hdu 1588(矩阵好题+递归求解等比数列)

Gauss Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3149    Accepted Submission(s): 1323 Problem Description Without expecting, Angel replied quickly.She says: "I'v heard that you'r

[LeetCode系列]最大连续子列递归求解分析

本文部分参考Discuss: LeetCode. 步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含. 步骤2. 步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行步骤1. 步骤2.2 如果最大子序列包含, 则结果很简单, 就是左子列的最大后缀子列(即包含左子列最后一个元素--中间元素)加上右子列的最大前缀子列(即包含右子列第一个元素--中间元素) 步骤3. 返回三者中的最大值(左子列最大值, 右子列最大值, 二者拼接最大值). 1 class Solutio