如何快速理解递归——蓝桥杯 试题 基础练习 FJ的字符串(递归与非递归解法)——10行代码AC
励志用少的代码做高效的表达。
注意点:
1、规律
2、非递归解法:string重载了+=运算符,因此用string会方便很多。并且string动态扩充,防浪费,更高效。
3、递归解法:官方的标签就是递归,也就是说递归是本题的最优解。
下面我把两种代码都贴上,根据喜好选择即可。
非递归代码:
#include<bits/stdc++.h>
using namespace std;
int main() {string s; s+="A"; int n, num = 0; cin >> n;while(++num != n) { string s1 = s; s += (char)(65+num); s += s1; } cout << s; return 0;
}
补充:快速理解递归的小技巧
说一下递归函数:
递归函数由两部分组成:边界条件和递归体。边界条件确保这个函数可以结束。递归体使函数源源不断的调用自己来进行操作。下面我们仔细剖析一下。
1、边界条件:if(n==1) 输出A。 没啥可说的,着重说递归体。
2、递归体:我们观察了A1-A4这几个公式后发现:公式以字符:(char)(65+n-1)为中心递归。也就是说:无论公式怎么变,(char)(65+n-1)这个字符一定在中间。一定输出一次。但在这个字符的左右两侧,输出的符号却因为n的增大而变多。 所以。我们可以这样认为:左边是一个递归公式,源源不断输出字符;中间是固定的一个字符,直接用printf输出;右边是一个和左边一样的递归公式,也是源源不断的输出字符。
这样:这道题的递归函数雏形就出现了: 递归公式;输出字符;递归公式。 那么,这个递归公式到底怎么写? 我们看A2。如果我们想写一个函数,既要满足“递归公式;输出字符;递归公式”这种构造,也要满足输出“ABA”,思路是不是一目了然了?
直接敲:digui(n-1); printf("%d",char(65-n+1)); digui(n-1); 一道题的核心代码就完成了。
总结:
1、根据A1,找到边界条件。
2、根据A1-A4找出规律,明白哪些是固定输出的,哪些需要用递归体表达
3、根据A2和第二条找到的规律,写出递归代码。
递归代码;
#include<cstdio>
void f(int a) {if(a == 0) printf("%c", 'A');else { f(a-1); printf("%c", a+'A'); f(a-1); }
}
int main() {int a; scanf("%d", &a);f(a-1); printf("\n");return 0;
}
日拱一卒,功不唐捐。
如何快速理解递归——蓝桥杯 试题 基础练习 FJ的字符串(递归与非递归解法)——10行代码AC相关推荐
- [蓝桥杯]试题 基础练习 FJ的字符串
#include<iostream>using namespace std;int main() {int n;cin>>n;string res = "" ...
- [Java] 蓝桥杯BASIC-22 基础练习 FJ的字符串
问题描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = "ABACABA" A4 = "AB ...
- 蓝桥杯 BASIC-22 基础练习 FJ的字符串
问题描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = "ABACABA" A4 = "AB ...
- 蓝桥杯试题 基础练习 Sine之舞
蓝桥杯试题 基础练习 Sine之舞 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功.所以他 ...
- Python 蓝桥杯试题 基础练习 特殊回文数
Python 蓝桥杯试题 基础练习 特殊回文数 问题描述: 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于 ...
- Python 蓝桥杯试题 基础练习 数列排序
Python 蓝桥杯试题 基础练习 数列排序 题目描述: 问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n ...
- 蓝桥杯试题 基础练习 数列特征python
蓝桥杯试题 基础练习 数列特征python 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给出n个数,找出这n个数的最大值,最小值,和. 输入格式 第一行为整数n,表示数的个数. ...
- 蓝桥杯试题 基础练习 十六进制转十进制
蓝桥杯试题 基础练习 十六进制转十进制 C/C++实现 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. ...
- Python 蓝桥杯试题 基础练习 十六进制转八进制
Python 蓝桥杯试题 基础练习 十六进制转八进制 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行, ...
最新文章
- 超全的设计模式简介(45种)
- golang输入命令行参数
- 【Go】Panic函数
- Jerry的Kubernetes学习笔记
- SQLSERVER中SP_WHO2和INPUTBUFFER的用法
- Sql 语句:显示 Sql Server 中所有表中的信息
- 书生中学计算机应用自费,浙江省台州市书生中学2016-2017学年高二上学期期中考试信息试题 Word版含答案.doc...
- 推荐几款好用的文本编辑器
- wps文件一点打印就关闭打印机服务器,WPS一打印就程序无响应怎么处理?
- div中border属性
- laravel8+jwt+邮箱注册验证
- [CTF从0到1学习] 一、CTF 概述
- 项目质量管理全部精华看这篇就够了
- vue [ECharts] Unkown series surface
- codevs 2627 村村通
- matlab 画三条曲线,如何利用MATLAB(plot 3函数和fplot3函数)绘制三维曲线?
- 台式计算机和便携式计算机是替代品吗,一种便携式计算机的制作方法
- SQL 01 按部门统计内部员工薪资排名--partition by--order by--dense_rank()
- 一行指令自动搭建AI绘画:stable-diffusion-webui_v1.3.2
- 大数据下的电商风控体系——李学庆