首页 > 其他分享 >递归与排列组合问题

递归与排列组合问题

时间:2022-10-15 23:33:10浏览次数:43  
标签:15 cout 递归 int return 问题 num 排列组合

指数型枚举

#include <iostream>
using namespace std;

int n, num[15];

void print(int cnt) {
    cout << num[1];
    for (int i = 2; i <= cnt; i++) {
        cout << " " << num[i];
    }
    cout << endl;
}

//从第几个数字开始,更改第几位的数字
void func(int start, int number) {
    for (int i = start; i <= n; i++) {
        num[number] = i;
        print(number);
        func(i + 1, number + 1);
    }
}

int main() {
    cin >> n;
    func(1, 1);
    return 0;
}

结果

输入: 4
1
1 2
1 2 3
1 2 3 4
1 2 4
1 3
1 3 4
1 4
2
2 3
2 3 4
2 4
3
3 4
4

组合型枚举

#include <iostream>
using namespace std;

int n, m, num[15];

void print(int cnt) {
    cout << num[1];
    for (int i = 2; i <= cnt; i++) {
        cout << " " << num[i];
    }
    cout << endl;
}

//从第几个数字开始,更改第几位的数字
void func(int start, int number) {
    if (number == m + 1) {
        print(m);
        return;
    }
    for (int i = start; i <= n; i++) {
        num[number] = i;
        func(i + 1, number + 1);
    }
}

int main() {
    cin >> n >> m;
    func(1, 1);
    return 0;
}

结果

输入: 5 3
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5

排列型枚举

#include <iostream>
using namespace std;

int n, m, num[15], mark[15];

void print(int cnt) {
    cout << num[1];
    for (int i = 2; i <= cnt; i++) {
        cout << " " << num[i];
    }
    cout << endl;
}

//更改第几位的数字
void func(int number) {
    if (number == m + 1) {
        print(m);
        return;
    }
    for (int i = 1; i <= n; i++) {
        if (mark[i] == 1) continue;
        num[number] = i;
        mark[i] = 1;
        func(number + 1);
        mark[i] = 0;
    }
}

int main() {
    cin >> n >> m;
    func(1);
    return 0;
}

结果

输入: 3 3
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

(总结)递归二要素:

  1. 递归边界
  2. 递归函数的意义!!!

标签:15,cout,递归,int,return,问题,num,排列组合
From: https://www.cnblogs.com/Kelvin-Wu/p/16795350.html

相关文章

  • 多模匹配问题
    由来:KMP算法只能实现浏览一次目标串匹配一个模式串,而如果需要一次匹配多个模式串(即多模匹配问题),则需要更新原有的算法。Shift-And算法KMP算法的升级版:Shift-And算法Shif......
  • 如何解决Navicat连接Mysql数据库时出现1251报错问题
    如何解决Navicat连接Mysql数据库时出现1251报错问题​​一、前言​​​​二、错误信息​​​​三、分析问题​​​​四、解决方法​​一、前言二、错误信息  用Navicat软......
  • while循环条件不成立却无法跳出死循环的问题
    在进入循环的时候,实际上是将A从内存加载到寄存器里面运行的,在整个循环中,A这个变量都只是在读取寄存器里面的值。而当进入中断的时候,中断里面会从内存加载A到寄存器......
  • truffle安装问题-无法加载文件
      在powershell下输入以下命令set-executionpolicyremotesigned  问题解决搜索复制......
  • 关于Mybaties数据库链接出现的问题
    最大的bug就是Navicat驼峰studentInfo运行一次过后,惊奇的发现小写也可以运行了。我不李姐!!!......
  • 对异常处理问题的相关思考及总结
    我们已经在课堂上学习了相关的“异常处理”的知识,接下来我们就继续探索异常处理吧!其实,也算得上是对“异常处理”的总结吧,快去看,快去看!知识点一:java.lang.NullPointerExcep......
  • L04-02. 尾调用(尾递归)
    互相调用函数执行原理:这里介绍函数a调用函数b在栈中的变化: 函数调用会在内存形成一个"调用记录",保存调用位置和内部变量等信息。如果在函数A的内部调......
  • 蛮力法解 01 背包问题
    本文发表在博客园乌漆WhiteMoon(https://www.cnblogs.com/linfangnan/),只要不是在博客园看到这篇文章的都是爬虫的哈。目录蛮力法01背包问题代码编写状态表示约束条件完......
  • 零一背包问题,滚动数组实现
    其实最难理解的内循环,也就是j的循环。j的条件是大于w[i],而w[i]则是当前第i个物品的重量,则j是一在从背包容量,向j-w[i]靠近。j-w[i]就是剩下来的空间,而这一波操作......
  • Mybatis源码环境 碰到的问题
    照着五月仓颉博客敲了一遍测试一直跑不起来出现了以下几个问题1.config.xml&的转义字符要写成&amp;<properties><propertyname="driver"value="com.mysq......