蓝桥杯 --- 递归与递推

news/2024/7/20 21:55:08 标签: 蓝桥杯, 算法, 深度优先

蓝桥杯 --- 递归与递推

  • 1. 递归
    • 92. 递归实现指数型枚举
    • 94. 递归实现排列型枚举

1. 递归

int f(int n)
{
	f(n - 1)
}

经典应用:斐波那契数列
1 2 3 5 8 13 21 34 55

  1. 递归公式:f(n) = f(n - 1) + f(n - 2) n >= 3
  2. 递归边界:if(n == 1) return 1; if(n == 2) return 2;

所有的递归都可以看做一棵递归搜索树
在这里插入图片描述

92. 递归实现指数型枚举

题目链接
从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。

输入格式
输入一个整数 n。

输出格式
每行输出一种方案。

同一行内的数必须升序排列,相邻两个数用恰好 1 个空格隔开。

对于没有选任何数的方案,输出空行。

本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。

数据范围

1≤n≤15

输入样例:

3

输出样例:


3
2
2 3
1
1 3
1 2
1 2 3

题目分析
对于 n 个数字,1 - n,我们可以用一个数组来标记,1 - n 个数字的选择情况,生成一棵递归搜索树
在这里插入图片描述

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<sstream>

using namespace std;
typedef long long ll;
const int N=20;

int n;
bool a[N]; 

void dfs(int x)
{
	if(x == n)
	{
		for(int i = 0; i < n; i ++ )
			if(a[i]) cout << i + 1 << ' ';
		cout << endl;
		return ;
	}
	
	a[x] = true;
	dfs(x + 1);
	a[x] = false;
	
	dfs(x + 1);
	// 这里可以直接写成 dfs(x + 1),因为不选的时候,对应的是 false,当回溯的时候依旧是 false
	//a[x] = false;
	//dfs(x + 1);
	//a[x] = false;
}

int main()
{
	cin >> n;
	dfs(0);
	return 0;
}



94. 递归实现排列型枚举

把 1∼n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。

输入格式
一个整数 n。

输出格式
按照从小到大的顺序输出所有方案,每行 1 个。

首先,同一行相邻两个数用一个空格隔开。

其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

数据范围

1≤n≤9

输入样例:

3

输出样例:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

题目分析

顺序1:依次枚举每个数放到哪个位置
顺序2:依次枚举每个位置放哪个数
在这里插入图片描述
同时题目要求满足字典序输出,对于这个题目来说,我们在枚举每个数的时候,只要从小到大开始枚举,那么得到的答案就是字典序

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<sstream>

using namespace std;
typedef long long ll;
const int N=20;

int n;
int res[N]; 
bool flag[N];

void dfs(int x)
{
	if(x == n)
	{
		for(int i = 0; i < n; i ++ )
			cout << res[i] << ' ';
		cout << endl;
	}
	
	for(int i = 0; i < n; i ++ )
	{
		if(!flag[i])
		{
			res[x] = i + 1;
			flag[i] = true;
			dfs(x + 1);
			flag[i] = false;
		}
	}
}

int main()
{
	cin >> n;
	dfs(0);
	return 0;
}




http://www.niftyadmin.cn/n/1680840.html

相关文章

Apache Spark源码走读之15 -- Standalone部署模式下的容错性分析

欢迎转载&#xff0c;转载请注明出处&#xff0c;徽沪一郎。 概要 本文就standalone部署方式下的容错性问题做比较细致的分析&#xff0c;主要回答standalone部署方式下的包含哪些主要节点&#xff0c;当某一类节点出现问题时&#xff0c;系统是如何处理的。 Standalone部署的节…

c语言实现简易2048游戏,简单实现C语言2048游戏

/*2048*/#include#include#include#include//全局变量int x[4][4]{0};int score0;int can_move;int empty(){int i,j;int n0;for(i0;i<4;i){for(j0;j<4;j){if(x[i][j]0)n;}}return n;}int check(){int i,j;int a,b;if(empty() 0){ab0;for(i0;i<4;i){for(j0;j<3;j)…

shell查询中文数据ora-01756_Redis:Key-Value的NoSQL数据库

主要内容Redis简介使用Redis作为缓存工具时流程Redis单机版安装Redis数据类型Redis持久化策略Redis主从复制哨兵(Sentinel)Redis集群(Cluster)Jedis一、 Redis简介1、NoSQL简介目前市场主流数据存储都是使用关系型数据库。每次操作关系型数据库时都是I/O操作&#xff0c;I/O操作…

在线交流系统的实现

2019独角兽企业重金招聘Python工程师标准>>> 一。系统分析 1. 页面结构 要用到两个界面 &#xff0c;登录界面和聊天界面。应该写几个JSP 代码 呢&#xff1f;为了利于分工&#xff0c;我们将 界面显示和动作分开。 三个动作 &#xff08;1&#xff09;登录&#…

93. 递归实现组合型枚举 (DFS + 剪支)

93. 递归实现组合型枚举 题目链接 从 1∼n 这 n 个整数中随机选出 m 个&#xff0c;输出所有可能的选择方案。 输入格式 两个整数 n,m ,在同一行用空格隔开。 输出格式 按照从小到大的顺序输出所有方案&#xff0c;每行 1 个。 首先&#xff0c;同一行内的数升序排列&#…

字符串处理_编程实现字符串处理函数的功能(2)

编程实现字符串处理函数的功能&#xff0c;既有助于对字符串函数功能的理解&#xff0c;又有助于进一步巩固三种基本结构及字符数组&#xff0c;今天推送编程实现strcmp、strcpy字符串函数处理功能。4.strcmp函数----字符串比较函数/*strcmp函数----字符串比较函数*/#include v…

Linux 小知识翻译 - 「小型移动式PC」

这次介绍下新闻上提到的「小型移动式PC」。&#xff08;这个当时日本新闻上的内容&#xff09; 最近&#xff0c;经常在日本的大卖场中看到一种小型的移动式PC。不仅是小巧方便携带&#xff0c;而且价格也便宜。而且&#xff0c;省电功能的加入&#xff0c;使电池能工作更长的时…

过渡效果_vue 过渡是淡入淡出的效果的解读

在过渡过程中&#xff0c;提供6个类名供其切换选择&#xff1a;1、v-enter&#xff1a;定义进入过渡的开始状态。(在元素被插入之前生效&#xff0c;在元素被插入之后的下一帧移除)&#xff1b;2、v-enter-active&#xff1a;定义进入过渡生效时的状态。(在整个进入过渡的阶段中…