c++递归

C / C++ 函数递归简单实例 long myPow(int n, int k) { if (! k) { return 1; } return myPow(n, k-1) * n; } 阅读详情

递归

1.概念

程序调用自身的编程技巧称为递归
函数直接或间接的调用自己,这样的函数叫做递归函数
递归函数要有一个结束条件
递归算法 的思想在于反复调用自身函数,每次把大问题范围缩小(小问题的求解方法与原问题相同),直到范围缩小到可以直接得到边界值,然后再在返回的路上求出原问题的解
我们先不着急,从简单的开始哈~

2.简单例题

2.1 递归求n!

2.2.1 题目

题目描述:
使用递归求 123*…*n 的结果。
答案对998244353取模。
输入格式:
一个正整数代表n。
输出格式:
计算结果对998244353取模。
样例输入:
1
样例输出:
1
约定:
1<=n<=10000

2.2.2 分析

偷懒的可以用for循环做出来(其实基本上所有的递归都可以),但是今天就不讲了哈
不难看出,这道题的边界条件为当n=1时,返回1
如果还没有到边界值,就算出n与(n-1)的乘积,并取模(余数定理可以证明这样与最后取模的效果一样)

2.2.3 代码
#include<bits/stdc++.h>
using namespace std;
long long f(int n){
	if(n==1){
		return 1;
	}else{
		return f(n-1)*n%998244353;
	}
}
int main(){
	int n;
	cin>>n;
	cout<<f(n);
	return 0;
}

注:小编试的时候在最后取模会出错哦~

2.2 斐波那契数列(Fibonacci)

2.2.1 题目

题目描述:
F[1]=F[2]=1, 当i>2时,F[i]=F[i-1]+F[i-2].
输入 n,求斐波那契数列的第 n 项。
要求使用递归。
输入格式:
一个正整数n
输出格式:
一个数表示答案
样例输入1:
3
样例输出1:
2
约定:
1<=n<=10

2.2.2 分析

与上一题一样,先分析得到当n=2或者n=1时返回1
如果不是就把(n-1)和(n-2)加起来得到这个数

2.2.3 代码
#include<bits/stdc++.h>
using namespace std;
long long f(long long n){
	if(n==1||n==2){
		return 1;
	}else{
		return f(n-1)+f(n-2);
	}
}
int main(){
	int n;
	cin>>n;
	cout<<f(n);
	return 0;
}

现在上升难度哈

3. 困难例题

3.1 输出回文数

3.1.1 题目

题目描述:
输入一个正整数n,设n有d个数位,则请你输出一个有 2d 个数位的回文数字 m,且m的后 d 位恰好就是n的前d位。
数字m可能包含前缀0 。
请只使用一个递归函数,不用printf完成这个任务。
输入格式:
一个正整数n
输出格式:
一个正整数m
样例输入1:
19260817
样例输出1:
7180629119260817
约定:
1<=n<=1e9

3.1.2 分析

这道题就是先把这个数倒序输出,再输出原数就完事了

3.1.3 代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	cin>>s;
	int a[10];
	for(int i=s.size()-1;i>=0;i--){
		a[s.size()-i-1]=s[i]-'0';
	}
	for(int i=0;i<s.size();i++){
		cout<<a[i];
	}
	cout<<s;
	return 0;
}

3.2 汉诺塔问题

3.2.1 题目

题目描述:
著名的汉诺塔问题:
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆环,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
1.每次只能移动一个圆盘;
2.大盘不能叠在小盘上面。
解决这类问题有以下方案:
现在假设我们要将 t 个盘子从柱子 x 放到柱子 y,则我们可以先想办法把上面的 t-1个盘子放到另一个柱子上,然后将最大的盘子放到y上,最后将那t-1个盘子放到第 y 个柱子上。那么移动 t-1 个盘子就变成了一个子问题。
给定 n ,求问:按照上述策略,一共需要多少次操作才能成功?
输入格式:
一个正整数 n
输出格式:
一个正整数表示答案。
样例输入1:
2
样例输出1:
3
约定:
1<=n<=10

3.2.2 分析

这道题目也就是每次都想办法移走上面的所有,然后拿出最下面的放到指定柱子上
终止条件就是当只有一个盘子的时候,返回1

3.2.3 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int f(int x){
	if(x<=1){
		return 1;
	}else{
		return 2*f(x-1)+1;
	}
}
int main(){
	int n;
	cin>>n;
	cout<<f(n);
	return 0;
}

制作不易,点个赞吧😘

C++递归/递归函数(详细讲解) 递归是一种将问题分解为更小子问题的策略,理解递归问题的整体结构和递归边界是关键。递归边界是确定递归何时结束的条件,正确地确定递归边界是确保递归算法正确运行的关键。一旦确定了递归边界,就可以根据问题的具体情况设计递归函数,将问题分解为更小的子问题,并逐个解决这些子问题。在设计和实现递归函数时,要确保递归调用能够正确地解决子问题,并将子问题的解组合起来以形成原问题的解。通常,递归函数会包含一个或多个递归调用,以便处理更小的子问题。 阅读详情

相关推荐

《C++递归算法详解》——自己归纳版

一、Introduction 递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。递归算法,其实说白了,就是程序的自身调用。它表现在一段程序中往往会遇到调用自身的那样一种coding策略,这样我们就可以利用大道至简的思想,把一个大的复杂的问题层层转换...

WangY.H 1万+

C++基础---递归函数

1. 递归函数 1.1 递归函数的定义 递归函数:即在函数体中出现调用自身的函数,即函数Func(Type a,……)直接或间接调用函数本身; 递归函数:在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值x0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数; 递归函数:不能定义为内联函数; 1.2 递归的本质 递归函数的例子: (1)例

Catherine的笔记 3055

C++ 递归详解

递归在C++中广泛用于‌数学问题‌(阶乘、斐波那契)、‌数据结构遍历‌(树、图)、‌分治算法‌(排序、全排列)及‌动态规划‌场景‌。需注意‌终止条件‌和‌重复计算优化‌,必要时改用迭代或记忆化搜索提升性能‌。

a33232223的博客 1906

蓝桥杯练习6

蓝桥杯学习记录 一、测试练习: 特殊回文数: 问题描述: 123321是一个非常特殊的数,它从左边读和从右边读是一样的。 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 样例输入: 输入一行,包含一个正整数n。 52 样例输出:按从小到大的顺序输出满足条件的整数,每个整数占一行。 899998 989989 998899 数据规模和约定 1<=n<=54 解题思路: 代码: #include <iostream> #include <vect

qq_46211941的博客 200

C++递归实现strlen函数功能

不管是C还是C++编程,strlen函数对于编程者来说再熟悉不过了,strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始直至遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不确定的,它会从首地址一直找下去,直到遇到'\0'停止。如下面举的数组例子:(更多好资源请访问本人论坛:www.jianyunge.top) char str[100]; cout&lt...

小灰灰编程记 2137

C++递归算法

C++递归算法!

PanDaoxi 4829

c++回文数

一个回文数是指正着读和倒着读一样的数 , 比如 12321 和 987789 就是回文数 .如果n是回文数, 输出"YES". 如果不是回文数, 输出"NO"输入一个数 , 输出判断它是不是回文数。【输入输出样例#1】【输入输出样例#2】

m0_72019193的博客 6088

C++ 递归函数 详细解析——C++日常学习随笔

1. 递归函数 1.1 递归函数的定义 递归函数:即在函数体中出现调用自身的函数,即函数Func(Type a,……)直接或间接调用函数本身; 递归函数:在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值x0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数; 递归函数:不能定义为内联函数;

青少年编程学习指导 5010

cpp中递归

cpp可以自己调自己,与C不同,cpp不允许main()调用自己,这种功能被称为递归。 1.包含一个递归调用的递归 如果递归函数调用自己,则被调用的函数也将调用自己,这将无限循环下去,除非代码中包含终止调用链的内容,通常的方法将递归调用放在if语句中,例如: void recurs(argumentlist) { statements1 if (test) recurs(arguments) statements2 } #include <iost

liguandong 2577

避开地图定位偏差!手把手教你用Python实现火星坐标与WGS84精准转换

本文深入解析了国内地图服务中火星坐标(GCJ-02)与国际标准WGS84坐标系之间的偏差问题,并提供了基于Python的精准转换解决方案。文章详细阐述了坐标转换的核心原理,手把手教你构建可复用的转换工具包,并演示如何将其集成到实际应用(如Flask API)中,帮助开发者和数据分析师有效解决地图定位不准、多源数据无法对齐的痛点,提升地理信息处理能力。

weixin_29250403的博客 125

【SystemVerilog项目实践】4.AHB-SRAMC(验证计划)

验证计划

托马斯的博客 3661

【C++】递归

程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 递归程序设计是C++语言程序设计中的一种重要的方

李嘉佑的博客 7084

LIS3DHTR三轴加速度计Arduino驱动与嵌入式集成指南

加速度计是嵌入式系统中实现运动感知、姿态解算和振动分析的核心传感器。其工作原理基于MEMS微机械结构在惯性力作用下的电容变化,经片内ADC转换为数字信号;I²C接口因其硬件资源占用少、布线简洁,成为低功耗物联网节点的主流通信方式。技术价值体现在高分辨率(12位)、多量程(±2g~±16g)与低功耗(待机电流仅2µA)的平衡,支撑电池供电设备长期运行。典型应用场景包括可穿戴设备的姿态识别、工业预测性维护中的振动监测,以及智能硬件的敲击/跌落检测。本文围绕LIS3DHTR芯片及其Grove模块,详解Arduin

weixin_42584758的博客 596

递归初阶 cpp

递归基础与汉诺塔问题解析 本文介绍了递归的基本概念和应用方法,并通过汉诺塔问题展示了递归的实际运用。递归的核心思想是"自己调用自己",适用于主问题与子问题处理方式相同的情况。文章强调从宏观角度理解递归,将其视为能完成任务的黑盒,而不必纠结于递归展开细节。通过归并排序示例说明了编写递归函数的三个关键步骤:确定相同子问题、解决单个子问题、设置递归出口。最后以汉诺塔问题为例,展示了如何通过递归实现盘子的移动过程,并提供了完整的C++实现代码。

2502_93161594的博客 344

YOLOv9分割改进 ,YOLOv9分割改进主干网络为华为EfficientNet,助力涨点

EfficientNet论文中研究了卷积网络的缩放和,并证明对深度,宽度和分辨率复合缩放的重要性,因此精度和效率更好。为了阐述相关的原理,我们提出了简单有效的复合缩放方法,使得模型缩放具有一定设计准则,同时兼顾了模型的效率。我下文将 YOLOv9 分割模型改进主干网络为 EfficientNet 融合网络结构。论文地址代码地址下文都是手把手教程,跟着操作即可添加成功把环境配置好,数据集处理好,训练基本能成功,创作不易,请帮忙点一个爱心,关注我,带你不挂科!

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 938

数据挖掘实战-基于LSTM时间序列模型的香烟销售预测分析

本文介绍了基于LSTM时间序列模型的香烟销售预测分析实验。实验背景为烟草市场竞争激烈,企业需提高销售预测准确性以优化生产、库存和营销策略。LSTM模型因其处理长序列数据的能力被选为预测工具。实验步骤包括数据准备、特征工程、模型构建、训练与评估及结果分析。数据集来自某市门店的销售数据,技术工具为Python 3.9和Jupyter Notebook。实验过程涵盖数据导入、预处理、产品销售与区域销售分析、销售预测(包括销售额、销量、利润及海通店销售额预测)。

m0_64336780的博客 8952

C++ 递归

C++ 递归

Rainbow_r的博客 993

【本地部署实战】LM Studio深度使用指南:从环境搭建到模型调优

LM Studio通过极简的操作流程和强大的生态兼容性,让本地部署大模型成为可能。随着M4芯片的发布和CUDA 12.0的优化,未来本地化AI开发将迎来新的爆发点。建议开发者关注官方Discord社区(https://discord.gg/lmstudio)获取最新模型支持信息。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 8754

C++ 函数进阶之递归与尾递归优化

本文介绍了C++中递归函数的核心概念与应用,主要内容包括:1)递归函数的定义、三大要素(终止条件、递归表达式、收敛性)和执行过程;2)递归在数学问题、数据结构遍历和组合问题中的典型应用;3)递归常见问题(栈溢出、重复计算)的解决方案,如迭代实现、尾递归优化和记忆化搜索。文章通过阶乘、斐波那契数列等示例代码,详细解析了递归的实现原理和优化方法,帮助开发者掌握递归编程技巧并规避潜在风险。

今天比昨天更努力一点! 9570

Qt6.10 | Qt Bluetooth 蓝牙

本文介绍了QtBluetooth模块的功能和使用方法,包括蓝牙API概述、构建配置(CMake/qmake)、权限管理、平台支持(Linux/macOS特殊处理)、日志设置及许可信息。重点说明Linux平台的后端选择机制,以及macOS上的依赖限制。最后提及蓝牙聊天示例,展示RFCOMM协议通信的实现。全文提供了蓝牙开发的技术要点和注意事项。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 400

ABAP Cloud 里的高性能日志:CL_BALI_LOG、XCO_CP_BAL 与 AML 的性能对比与选型指南

ABAP日志框架性能对比与选型建议 本文对比了ABAP Cloud中三种主流日志框架的性能表现与适用场景: 标准BALI:适合明确需要保存日志的场景,保存路径短,性能较好 XCO_CP_BAL:API更现代但性能较低,适合需要即时可见性的场景 AML:开源框架,擅长消息缓冲,适合批量处理时暂存消息 测试结果表明: 纯记录不落库时AML最快 需要保存时BALI性能最优 second connection不提升性能但能确保日志留存 选型建议: 高频批处理优先AML+BALI组合 故障诊断考虑XCO的即时可见性

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 215

C++-递归算法详解

递归是指在函数内部调用自身。基本情况(Base Case):这是递归的终止条件,当满足这个条件时,函数将不再调用自身,而是直接返回一个值。递归情况(Recursive Case):这是函数在不满足基本情况时,调用自身并简化问题的方式。递归算法在计算机科学中是一个强大的工具,尤其适用于解决复杂的结构性问题。通过实践和理解,您可以更好地运用递归,并通过动态规划、尾递归优化等技术提升算法性能。虽然递归具有不可避免的性能开销,但在很多情况下,它的简洁性和优雅性是其他方法无法比拟的。

weixin_73139914的博客 2720

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

深入了解 C++ 算法中的递归

在 C++ 编程的世界里,算法是解决各种问题的核心工具,而递归作为一种强大且独特的算法策略,具有广泛的应用和深入的研究价值。递归是一种解决问题的方法,它通过将问题分解为规模更小的相同问题,然后调用自身来解决这些子问题,直到问题规模小到可以直接解决为止。

fn7525的博客 1650

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++之递归

递归是 C++ 中一种强大的工具,但需要谨慎使用,确保有正确的基准条件,并注意递归深度和效率问题。对于某些问题,递归可以提供简洁的解决方案,但在性能要求较高的情况下,可能需要考虑使用迭代或其他优化技术。

菜就多看,多想,多敲 707

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C++递归函数

C++递归函数【递归,就是在运行的过程中调用自己】比如:(点击了下面的递归,搜索结果还是递归)   A.构成递归需具备的条件:    1.子问题须与原始问题为同样的事,且更为简单。    2.不能无限制的调用本身,必须有个出口,化简为非递归状况处理。B.递归可以解决的问题:阶乘、斐波那契数列、汉诺塔、杨辉三角的存取、字符串回文判断、字符串全排列、二分查找、树的深度求解C.递归的过程(图片来源见水印...

localhost 3万+
上一篇: c++模拟
下一篇: c++分治
sync_async
博客等级 码龄4年 5粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值