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

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

一、类循环组合排列

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-11-29 23:24:50

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

【原创】开源.NET排列组合组件KwCombinatorics使用(一)—组合生成

       本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1.[原创]开源.NET排列组合组件KwCombinatorics使用(一)-组合生成  2.[原创]开源.NET排列组合组件KwCombinatorics使用(二)--排列生成 3.[原创]开源.NET排列组合组件KwCombinatorics使用(三)--笛卡尔积组合 前言 本文今天介绍的.NET开

Win8.1/Win10系统使用组合键玩转桌面图标排列的操作方法

  Win8.1/Win10系统使用组合键玩转桌面图标排列的操作方法.今天小编和大家分享Win8.1/Win10使用组合键玩转桌面图标排列的操作方法,对于Win8.1/Win10系统桌面图标的管理可能每个人的需求都是不一样的,有些用户喜欢把感觉用得到的东西都放在桌面上,一些用户习惯简洁大方.为满足大众要求,在Win8.1/Win10中,微软新增的组合键让桌面图标排列有了更多选择,下面我们就看一下操作方法. 一.这种效果是不是有点透明的味道 操作方法很简单,只需要用键盘和鼠标即可完成,关键是要记住

java 求最大子序列和问题递归求解报越界异常

问题描述 java 求最大子序列和问题递归求解报越界异常 /** * 分治递归求解问题: * 分为三种情况: * 1.最大子序列出现在左半边部分 * 2.最大子序列出现在右半边部分 * 3.最大子序列出现在中间部分,此时取两边的最大子序列的和之和(左边子序列包含最后一个元素,右边子序列包含第一个元素) * * @param array * @return */ public static int maxSubSum1(int[] array) { return maxSubSumRec(arra

房管局工会经费-什么是递归求解C语言题目,及一些例题的求解策略

问题描述 什么是递归求解C语言题目,及一些例题的求解策略 让他好人方沟通环境规划将美国还没开会尽快好个菲达环保发的规划和坏处比较好就会加快见客户和供货价格发动机回复该不会 解决方案 递归就是在解决一个问题的时候对这个问题的一部分采用和自身相同的方式处理.这很类似数学归纳法的思想.常见的递归例题有汉诺塔问题.分治法求解.快速排序.用递归求费波拉契数列等等. 解决方案二: 一个程序的部分和它的全部具有相同的处理原理.这是一种非常朴素的哲学.放松下,建议你看下这部精彩的记录片http://www.56

使用C++递归求解跳台阶问题_C 语言

题目: 一个台阶总共有 n 级,如果一次可以跳 1 级,也可以跳 2 级.求总共有多少总跳法? 分析: 也是比较基础的题目,通过递归可以方便的求解. 用Fib(n)表示青蛙跳上n阶台阶的跳法数,青蛙一次性跳上n阶台阶的跳法数1(n阶跳),设定Fib(0) = 1:        当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;        当n = 2 时, 有两种跳的方式,一阶跳和二阶跳:Fib(2) = Fib(1) + Fib(0) = 2;        当n = 3

dfs-python 无法停止递归 求解啊

问题描述 python 无法停止递归 求解啊 def dfs1(x,y): show[x][y]='.' for i in f: for j in f: nx=x+i ny=y+j if(nx>=0 and ny>=0 and nx dfs1(nx,ny) if(nx>=0 and ny>=0 and nx<10 and ny<10 and ans[nx][ny]!=0 and mine[nx][ny]!=1 and(i!=0 or j!=0)and(i==0 or j

《算法设计与分析》一一2.3 “分治递归”求解

2.3 "分治递归"求解 递归是一种基本的算法设计方法,而递归算法的代价往往可以用递归方程来描述,因而解递归方程就成为递归算法分析的重要技术.分治策略(divide and conquer)是一种简单而有效的算法设计策略(详见第三部分各章节的讨论),源自于分治算法分析的一类特定形式的递归方程我们称之为"分治递归"(divide and conquer recursion).本节着重讨论"分治递归"的求解方法.2.3.1 替换法 有一种"

class-这是一个应用指针组合通信的代码,学的比较少,问题出在哪里,求支招(问题描述,用类B的指针操作类A)

问题描述 这是一个应用指针组合通信的代码,学的比较少,问题出在哪里,求支招(问题描述,用类B的指针操作类A) #include #include using namespace std; class A{ private:int x,y; public: A(){ x=0; y=0; } A(int x,int y){ this->x=x; this->y=y; } void Do(){ cout<<"ADo"< } }; class B{ private

八皇后问题的递归求解

八皇后问题的递归算法 #include <stdio.h>#include <stdlib.h>#define N 8        /* 棋盘边长  */#define XXN     15 /* 正(反)对角线个数 */#define TRUE 1#define FALSE 0 int map[N][N];/* 棋盘     */ int col[N];   /* 列       */int XX[XXN];  /* 正对角线 */int YY[XXN];  /* 反对角线 *