lq-递归

news2024/12/25 10:13:00

1、递归实现指数型枚举

从 1∼nn个整数中随机选取任意多个,输出所有可能的选择方案。

输入格式

输入一个整数 n

输出格式

每行输出一种方案。

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

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

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

数据范围

1 ≤ ≤ 15

输入样例:

3

输出样例:


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

递归搜索树:

AC代码:

package 做题;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main 
{
    static final int N = 16;
    static BufferedWriter wr;
    static int st[] = new int[N];
    
    static int n;
    
    public static void dfs(int u) throws Exception  //第几层就是筛选第几个数字
    {
        if(u > n) //不可以有等号,如果有等号会少一层递归,即最后一层无法递归 
        {
            for(int i = 1 ; i <= n ; i ++) // 从1到n选择
            {
                if(st[i] == 1)  wr.write(i+" ");// 把选的数打印出来
            }
            wr.write("\n");
            return;
        }
        
        // 不选这个数字
        st[u] = 2;
        dfs(u + 1);
        st[u] = 0;
        
        // 选这个数字
        st[u] = 1;
        dfs(u + 1);
        st[u] = 0;
    }
    
    public static void main(String[] args) throws Exception, IOException 
    {
        BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
        wr= new BufferedWriter(new OutputStreamWriter(System.out));
        n = Integer.parseInt(rd.readLine().trim());
        dfs(1);
        wr.flush();
        wr.close();
        rd.close();
    }
}

2、递归实现排列型枚举

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

输入格式

一个整数 n

输出格式

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

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

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

数据范围

1≤n≤9

输入样例:

3

输出样例:

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

递归搜索树:

AC代码:

package 做题;
import java.awt.Taskbar.State;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main 
{
    static final int N = 16;
    static BufferedWriter wr;
    static int state[] = new int[N];// 0 表示还没放数,1~n表示放了哪个数
    static boolean used[] = new boolean[N];// true表示用过,false表示还未用过
    
    static int n;
    
    public static void dfs(int u) throws Exception 
    {
        if(u > n) // 边界
        {
            for(int i = 1 ; i <= n ; i ++)  wr.write( state[i] + " "); // 打印某个方案
            wr.write("\n");
            return;
        }
        
        // 依次枚举每个分支,即当前位置可以填哪些数
        for(int i = 1 ; i <= n ; i ++)
        {
            if(!used[i])
            {
                state[u] = i;
                used[i] = true;
                dfs(u + 1);
                
                // 恢复现场
                state[u] = 0;
                used[i] = false;
            }
        }
    }
    
    public static void main(String[] args) throws Exception, IOException 
    {
        BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
        wr= new BufferedWriter(new OutputStreamWriter(System.out));
        n = Integer.parseInt(rd.readLine().trim());
        dfs(1);
        wr.flush();
        wr.close();
        rd.close();
    }
}

3、简单斐波那契

以下数列 0 1 1 2 3 5 8 13 21 ... 被称为斐波纳契数列。 这个数列从第 3项开始,每一项都等于前两项之和。输入一个整数 N,请你输出这个序列的前 N项。

输入格式

一个整数 N

输出格式

在一行中输出斐波那契数列的前 N

项,数字之间用空格隔开。

数据范围

0<N<46

输入样例:

5

输出样例:

0 1 1 2 3

递归搜索树:

(每个f(x)的最底层到f(0)或者f(1),因为这样才能算出值来)

package 做题;
import java.awt.Taskbar.State;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main 
{
    static final int N = 50;
    static BufferedWriter wr;
    static int a[] = new int[N];
    
    static int n;
    
    static void dfs(int u) throws Exception 
    {
        if(u == n - 1)  return;  // 因为a[0]和a[1]有初值,一上来就更新了a[2],例如,如果计算f(5)(n等于5)即a[4](a[4] = a[3]和a[2]在u = 2的时候更新),更新完后,在u = 3的时候return,结束值的更新,确实够用了,但是如果n = 1,n - 2 = -1,u从主函数第一次进去dfs函数的时候等于0,u只递增,不可能是负数,所以会无限递归,直到栈爆,所以位置需要偏移一下,u == n - 1的时候结束递归来应对n == 1,多递归一层更新新的数也无所谓,寄不了
        a[u + 2] = a[u + 1] + a[u];
        dfs(u + 1);
    }
    
    public static void main(String[] args) throws Exception, IOException 
    {
        BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
        wr= new BufferedWriter(new OutputStreamWriter(System.out));
        n = Integer.parseInt(rd.readLine().trim());
        
        a[0] = 0;
        a[1] = 1;
        
        dfs(0);
        
        for(int i = 0 ; i < n ; i ++)  wr.append(a[i] + " ");
        
        wr.flush();
        wr.close();
        rd.close();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AStar(A*)算法核心思想( for unity)

AStar算法算法思想举例理解核心代码A* 算法&#xff0c;A* (A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法&#xff0c;也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近&#xff0c;最终搜索速度越快。 注意:AStar的类应该作为一种单例类只…

软考初级哪个好考

其实软考初级的实用性差不多。只是看自身怎么看&#xff0c;考哪一科对你来说&#xff0c;产生的意义更大&#xff0c;对自己以后的发展前景帮助大&#xff0c;那你就选择哪一科就行。 软考初级科目有&#xff1a;程序员、网络管理员、信息处理技术员、信息系统运行管理员、网…

C语言之vs2022安装教程,还不会的快来看

下载安装包官方无毒下载链接:https://visualstudio.microsoft.com/zh-hans/vs/点击链接或者复制到浏览器出现如下按钮点击下载社区版本Visual Studio 2022Community 2022: 社区版&#xff0c;也可以理解为个人版。适用于学生、开源和个人。一些新手用来学习是个不错的选择Profe…

第十三届蓝桥杯省赛 C++ B组 - 修剪灌木

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;付账问题 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥别的小伙伴整理常考算法题解&#xff0c;祝大家…

sentinel部署配置

sentinel部署配置sentinel 部署&#xff08;V1.8.6&#xff09;获取 Sentinel 控制台启动修改用户名密码控制台登录客户端集成sentinel 部署&#xff08;V1.8.6&#xff09; 获取 Sentinel 控制台 您可以从 release 页面 下载最新版本的控制台 jar 包。 官网&#xff1a; ht…

【C语言】深度剖析数据在内存中的存储---(附源码 | 建议收藏)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;凡人修C传 &#x1f4ac;总结&#xff1a;希望你看完之后&…

让Tomcat服务器运行在Windows后台

让tomcat运行在Windows后台一、设置环境变量二、安装tomcat服务三、设置后台自动运行本机环境&#xff1a;win10一、设置环境变量 进入tomcat主目录的bin文件夹&#xff0c;复制路径 快捷键winr键唤出运行框&#xff0c;输入sysdm.cpl然后点击“确定”进入系统属性面板 在系统…

传统工科应该怎么学习机器学习or深度学习?

还是老生常谈。建议先不要直接上手机器学习/深度学习&#xff0c;先把你研究对象/信号的机理给搞清楚&#xff0c;然后再开始上现代信号处理&#xff0c;机器学习/深度学习算法&#xff0c;只有对你研究对象的机理深入了解&#xff0c;才能更好地对信号处理算法&#xff0c;机器…

【职工管理系统】C++全栈体系(十三)

职工管理系统 第一章 管理系统需求 职工管理系统可以用来管理公司内所有员工的信息 公司中职工分为三类&#xff1a;普通员工、经理、老板&#xff0c;显示信息时&#xff0c;需要显示职工编号、职工姓名、职工岗位、以及职责 普通员工职责&#xff1a;完成经理交给的任务 …

运算符重载及组合与继承

目录 一、运算符重载 1.1普通运算符重载 1.2特殊运算符重载 二、标准输入输出流 三、组合与继承 3.1组合 3.2继承 1) public继承方式 2) protected继承方式 3) private继承方式 小作业&#xff1a;模仿c的string类&#xff0c;自己实现string类 一、运算符重载 百度…

【文件随机读写和文件缓冲区】

1.1fseek函数 1.2ftell函数1.3rewind函数2. 文件读取结束的判定2.1文件缓冲区 1.1fseek函数 根据文件指针的位置和偏移量来定位文件指针。 int fseek ( FILE * stream, long int offset, int origin );看不懂没关系&#xff0c;举个例子你就明白了。 我们首先在text.txt文…

送什么礼物给小学生合适?保护视力的专业护眼台灯

在学生们过节以及生日来临&#xff0c;父母们会精心为孩子准备好礼物的&#xff0c;而最有实际意义的&#xff0c;是对学习有所帮助的&#xff0c;比如学习机、护眼灯、绘画本&#xff0c;能丰富孩子的生活都可以&#xff0c;这几年儿童青少年的近视率迅速上升&#xff0c;有52…

TypeScript中的 | 分隔符、 运算符、类型谓词is

一. | 分隔符 在 TypeScript 中联合类型&#xff08;Union Types&#xff09;表示取值可以为多种类型中的一种&#xff0c;联合类型使用 | 分隔每个类型。联合类型通常与 null 或 undefined 一起使用&#xff1a; const sayHello (name: string | undefined) > { /* ... …

WC!咱平时使用的PDF,原来这么不安全?

早前&#xff0c;在2019年3月初&#xff0c;来自明斯特大学及波鸿鲁尔大学的德国研究人员称&#xff0c;他们已经设法利用新发现的漏洞&#xff0c;并成功地攻破了PDF文件中的数字签名。 随后&#xff0c;2019年10月再次披露&#xff1a; 加密PDF存在PDFex漏洞。 最后&#x…

基于wordpress和Sakura主题插件搭建博客网站

基于wordpress和Sakura主题插件搭建博客网站1.引言2.认清现实3.使用的本地化方法4.分享自己走的一些弯路5.硬刚404的余波6.额外的收获1.引言 最近&#xff0c;本着试试的想法&#xff0c;想着找一个前端方面的工作&#xff0c;遇到一些招聘软件或者网站上面有一栏是个人博客网站…

我用递归写单调栈(?)

前言&#xff1a;嗯,这个题上午有的思路&#xff0c;敲了一中午代码&#xff0c;改了一下午最后超时? 题&#xff1a;D. Boris and His Amazing Haircut 题意&#xff1a;一个理发师可以把一段数组给建成一个高度&#xff0c;他现在每个高度的剪子都有若干个。给一个原始数组和…

STL - Set容器

基本概念 构造和赋值 功能描述&#xff1a;创建set容器以及赋值 #include <algorithm> //算法 #include <iostream> #include <set> #include <string> using namespace std;// set/multiset容器void printSet(set<int>& s) {for (set<i…

Java之节点流和处理流(Buffered字节字符处理流)

文章目录前言基本介绍Buffered字符处理流BufferedReader缓冲字符输入流BufferedWriter缓冲字符输出流文件拷贝Buffered字节处理流文件拷贝&#xff08;二进制文件&#xff09;处理流关闭问题前言 Java中的流按照功能可以分为节点流和处理流。其中节点流是直接用来访问数据源&a…

GO的interface的使用和反射

博客主页&#xff1a;&#x1f3c6;看看是李XX还是李歘歘 &#x1f3c6; &#x1f33a;每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点&#xff0c;以及职场小菜鸡的生活。&#x1f33a; &#x1f497;点关注不迷路&#xff0c;总有一些&#x1f4d6;知…

自动化测试

一、关于自动化什么是自动化?扫地机器人 自动浇水机 自动洗手液 智能马桶... &#xff0c;能够有效的减少人力的消耗&#xff0c;同时提高生活质量。而自动化测试同样&#xff0c;能够有效减少人力的投入&#xff0c;同时提高了测试的质量和效率。回归测试&#xff0c;版本越来…