「Day 1—递归问题」

news/2025/3/17 13:35:04/文章来源:https://www.cnblogs.com/To-Carpe-Diem/p/18342236

递归问题

定义

简洁来说就是一个函数不断调用自身的一个过程。

习题

汉诺塔问题

思路

对于这个经典的问题,我们考虑了使用递归的做法,由于盘子是在三个底座上来回辗转的,所以我们要确定起始座,辅助座,和目标座。我们专注于最下面的最大的那个盘子,先将盘子都放到辅助座上,等到只剩最大的,将其放到目标座上,再继续由辅助座向目标座转移。

代码
void hanoi(int n,char a,char b,char c){if(n > 0){hanoi(n - 1,a,c,b);cout<<a<<"->"<<n<<"->"<<b;hanoi(n - 1,b,a,c);}return;
}

P5657 [CSP-S2019] 格雷码

思路

首先我们在读题的过程中就可以观察到,对于 \(n\) 位的格雷码,必须由 \(n-1\) 推出来,我们不免想到通过递归来实现,但在仔细观察之后会发现:

\(3\) 位格雷码为例,分别是000,001,011,010,110,111,101,100;那么他们是怎么得出来的呢,观察下图:

我们发现格雷码是有规律的,分为前一半和后一半,前为0,后为1,比较像一个二叉树,因为后面一半是逆序,所以左右对称。在左半边,所以如果根为0,那么左子树为0,右子树为1;如果根为1,那么左子树为1,右子树为0。右半边则相反.

代码
#include<iostream>
#include<cmath>
using namespace std;unsigned long long n,k;
bool flag = 0;int main(){cin >> n >> k;unsigned long long mid = pow(2,n-1);while(mid){if(!flag){if(k < mid){cout << "0";flag = 0;}else if(k >= mid){cout << "1";flag = 1;k = k - mid;}}else if(flag){if(k < mid){cout << "1";flag = 0;}else if(k >= mid){cout << "0";flag = 1;k = k - mid;}}mid /= 2;}return 0;
}

UVA679 Dropping Balls

思路

对于此题,我们依旧按朴素的思路,将 \(I\) 之前全模拟一遍,但是,我们发现,会TLE。故我们进行一些优化,根为n,则左子树为2n,右子树为2n+1,接下来我们需要看第I个小球会走哪里,通过观察发现,当 \(I\) 为偶数时,先走左边,反之。

代码
#include<iostream>
using namespace std;int T;int main(){cin >> T;while(T--){int deep,id,ans = 1;cin >> deep >> id;for(int i = 1;i < deep;i++){if(id % 2 == 1){ans = ans * 2;id = id / 2 + 1;}else{ans = ans * 2 + 1;id = id / 2;}}cout << ans <<"\n";}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集合类关系

每天坚持,终会抵达!

人工智能的虚拟世界:源码和制作方法

源码和制作方法:人工智能的三维虚拟世界,完全免费、完全开源、完整无缺,一步步教你怎么制作这个游戏。8月4日修复学校场景输入框无法输入的故障,并增加教室外的楼道场景。 源码和制作方法:人工智能的三维虚拟世界,完全免费、完全开源、完整无缺,一步步教你怎么制作这个游…

各种变量

1.局部变量2.实例变量相当于把Hello拿了出来,作为一个变量类型来使用 布尔值的默认值是false 3.类变量4.常量

【LCA 树上两点的距离 判定点是否在某条边中】洛谷P3398 仓鼠找sugar

题目链接:P3398 仓鼠找 sugar - 洛谷 | (luogu.com.cn) 题目大意:判定一棵树上的两条边是否相交 Tag: [LCA] [树上两点间距离的计算] [如何判断与点在某条路径上] 思路: \[\begin{align} &1.建图\\ &2.\text{dfs}然后\ 计算出每个点的深度 和计\text{anc}(i,j)\\ &…

go-zero微服务框架的静态文件服务

目录go-zero微服务框架的静态文件服务go-zero版本新建项目目录新建 demo.api 文件生成api代码新建建太文件查看文件目录写入静态服务代码访问1.html参考文档 go-zero微服务框架的静态文件服务 go-zero版本 go-zero v1.7.0 新建项目目录mkdir demo cd demo新建 demo.api 文件 de…

代码随想录Day4

24.两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head = [1,2,3,4] 输出:[2,1,4,3]示例 2: 输入:head = [] 输出:[]示例 3: 输入:head…

Go 静态编译及在构建 docker 镜像时的应用

Go 语言具有跨平台和可移植的特点,同时还支持交叉编译,可以在一个系统上编译出运行在另一个系统上的二进制可执行文件,这是因为 Go 在编译时支持将依赖的库文件与源代码一起编译链接到二进制文件中,所以在实际运行时不再需要依赖运行环境中的库,而只需要一个二进制文件就可…

JDK与JRE区别

JDK:是整个Java的核心,包含运行环境+一系列的开发工具包 JRE:java程序开发环境+核心工具类+JVM等。不能用于编译工作。 每天坚持,终会抵达!

mysql 两种重要的日志

前言 这个不用多说,两种重要的日志分别是redo log 和 binlog,这两种,下面分别来结束。 正文 先来redo log, redo log 是inno db 引擎特有的,运用了一种wal 技术,全称是: write-ahead logging. 它的关键点就是先写日志,再写磁盘,也就是先写粉板,等不忙的时候再写账本。…

STM32H7 HAL库CubeMX 双重ADC模式同步采样详细配置+FFT计算相位差

前言 在电赛备赛期间琢磨了一下ADC同步采样的实现方式,本来是打算直接用AD7606来着,但是搞了半天也没把驱动整出来...考虑到AD7606本身采样率也拉不到太高,于是就花了几天时间把片上ADC配出来了。查资料的时候我发现关于STM32双重ADC模式的资料是真的少,用FFT算两路信号相位…

Python pymodbus类库使用学习总结

实践环境 Python 3.9.13 https://www.python.org/ftp/python/3.9.13/python-3.9.13-amd64.exe pymodbus-3.6.8-py3-none-any.whl https://files.pythonhosted.org/packages/35/19/a9d16f74548d6750acf6604fa74c2cd165b5bc955fe021bf5e1fa04acf14/pymodbus-3.6.8-py3-none-any.w…

ThinkAdmin_v6两个简单漏洞(文件读取+信息泄露)

危险函数:file_get_contents()第二次遇到侵权声明 本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。 如果您是版权持有人,并且认为您的作品被侵犯,请通…