浅谈递归入门(1) - 指南

news/2025/10/1 11:39:48/文章来源:https://www.cnblogs.com/lxjshuju/p/19122294

声明

由于个人技术原因,难免有讲错、不专业的地方,欢迎大家指正!

简介

递归(recursive algorithm)是指一种通过重复将问题分解为同类的子问题而解决问题的方法。并且可以完全替代循环。递归就是在过程或函数里调用自身的算法。

案例1

题目描述

编程求 1\times 2 \times 3 \times ... \times n

结果不超过 long long 范围

输入格式

输入一行,只有一个整数  n(1\leq n\leq 20)

输出格式

输出只有一行(这意味着末尾有一个回车符号),包括 1 个整数。

输入输出样例

样例 1
输入样例

5

输出样例

120

样例 2
输入样例 

10

输出样例 

3628800

本例中,有如下思路:

N!=(N-1) ! \times N

那么该如何实现呢?请看下方代码:

#include 
using namespace std;
long long n;//数据
long long fun(long long x){//递归函数if(x==1)return 1;//终止条件else return x*fun(x-1);//调用自身
}
int main(){cin>>n;cout<

注意第5行代码,它的作用是作为递归的终止条件,因为如果无终止条件,那么递归就会陷入死循环出bug。

第6行代码就是递归函数在调用自身,以计算阶乘,就是把上文公式重复调用。

案例2

题目描述

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为 1,接下来每个数都等于前面 2 个数之和。

给出一个正整数 k ,要求菲波那契数列中第 k 个数是多少。

输入格式

输入一行,包含一个正整数 k(1\leq k\leq 46)

输出格式

输出一行,包含一个正整数,表示菲波那契数列中第 k 个数的大小

输入输出样例

样例 1
输入样例 复制

4

输出样例 复制

3

在本例中提到了斐波那契数列,递推公式为:a_{n}=a_{n-1}+a_{n-2}(n>2)

因此,易得出下文代码:

#include 
using namespace std;
long long mem[50],n;
long long f(int x){//递归函数if(mem[x])return mem[x];else{mem[x]=f(x-1)+f(x-2);//调用自身return mem[x];}
}
int main(){cin>>n;mem[1]=1;mem[2]=1;cout<

诶?这里mem[]数组是什么?没错,它就是记忆化搜索!

为什么这么用?请看下图。

注意看,fun(3)​和它的​分支子树都产生了重复,这时候再算一遍会非常浪费时间复杂度,所以可以存储并调用已计算的结果。mem数组是记录数据的数组。

最后,我挂一道思考题:

题目描述

上海世博会吉祥物海宝很讨人喜欢,聪明的海宝今天开始玩起了跳沙坑挖金币的游戏。

已知所有沙坑一字排开,依次编号为 1,2,3…,每个沙坑里面有若干金币,聪明的海宝开始不断地挖金币,在挖的过程中海宝发现了一个惊人的规律,第一个沙坑里面的金币数是 1,其余所有沙坑里的金币数和一些因素有关系:如果沙坑号 W 是奇数,那么该沙坑的金币数就是第 3×W+1 号沙坑的金币数加上 W;如果沙坑号 W 是偶数,那么该沙坑的金币数就是第 W/2 号沙坑的金币数加上 W。
如果问你第 n 号沙坑里面的金币数是多少,和海宝同样聪明的你能猜出来吗?

输入格式

一个正整数 n(1<=n<=100)

输出格式

第 n 号沙坑的金币数

输入输出样例

样例 1
输入样例 

10

输出样例 

46

数据范围与提示

第10号坑的金币数应该是第 5号坑的金币数加10,
第 5号坑的金币数应该是第16号坑的金币数加 5,
第16号坑的金币数应该是第 8号坑的金币数加16,
第 8号坑的金币数应该是第 4号坑的金币数加 8,
第 4号坑的金币数应该是第 2号坑的金币数加 4,
第 2号坑的金币数应该是第 1号坑的金币数加 2,
而第1号坑的金币数是已知的1。
反推回去第10号坑的数值应该是46。

​​​​(下一篇讲思考题)

到此结束!祝大家中秋快乐!国庆快乐!

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

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

相关文章

python+uniapp基于微信小工具的医院陪诊预约系统

python+uniapp基于微信小工具的医院陪诊预约系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

详细介绍:Nginx 访问控制、用户认证与 HTTPS 配置指南

详细介绍:Nginx 访问控制、用户认证与 HTTPS 配置指南2025-10-01 11:36 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; d…

自有服务器可以做网站吗wordpress游客留言

PAGEPAGE 10北大计算机考研 高等数学真题解答2008 年(5 题 60 分)1 (12 分) f (x) 有连续的二阶导数&#xff0c; f (a)  0 &#xff0c;求limxa1f (x  a)  f (a)1f (a) 。2 (12 分) f (x) 在a,b上连续且 f (a)  f (b)  0 &#xff0c; f (a) f (b) …

最容易做的门户网站动漫设计学校

特点 两线制总线&#xff1a;I2C仅使用两条线——串行数据线&#xff08;SDA&#xff09;和串行时钟线&#xff08;SCL&#xff09;进行通信&#xff0c;有效降低了连接复杂性。多主多从设备支持&#xff1a;I2C支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一…

comfyui配置

comfyui配置1.通过网盘分享的文件:ComfyUI-aki-v1.2.7z 链接: https://pan.baidu.com/s/168jlRhuu7b0kNgGcjYdInw?pwd=dtm1 提取码: dtm1

哪个网站做相册好海南网

1、为什么 shiro 有了《角色》后&#xff0c;还要设置《角色权限》呢&#xff1f;&#xff08;问题&#xff09; 思考&#xff1a;设置好角色了&#xff0c;那么就代表什么操作都可以执行了吗&#xff1f; 理解&#xff1a;如果上边回答是的话&#xff0c;那么只是《角色》层次…

[深度学习] 大模型学习5-高效微调框架Unsloth使用指北

Unsloth是一个专注于加速大语言模型微调过程的开源项目。它通过一系列底层优化,显著提升了微调速度并大幅降低了内存消耗,同时能保持模型性能。无论是研究者还是开发者,都能借助Unsloth更高效地定制自己的大语言模型…

前端-JavaScript简介JavaScript模块化 - 努力-

前端-JavaScript简介JavaScript模块化前端-JavaScript简介JavaScript模块化一、JavaScript介绍我们已经学习了HTML、CSS的基础内容,我们知道HTML负责网页的结构,而CSS负责的是网页的表现。 而要想让网页具备一定的交…

基本地址变换机构

设页面大小为L,逻辑地址A到物理地址E的变换过程如下 1.计算页号P和页内偏移量W 2.比较页号P和页表大小M如果P>=M则会发生越界中断,否则继续执行。(页号从0开始,页表长度至少为1,因此P=M也会越界) 3.页表中页号…

电子商务网站建设 以为例建设银行官方网站首页个人登录

有许多开源和免费的敏捷管理工具可供敏捷团队使用&#xff0c;以支持他们的敏捷项目管理和开发需求。以下是一些常见的开源/免费敏捷管理工具&#xff1a; 免费敏捷工具 以下是一些免费的敏捷工具&#xff0c;这些工具提供了一定的功能&#xff0c;可用于支持敏捷项目管理和开…

【APK安全】组件安全核心风险与防御指南 - 详解

【APK安全】组件安全核心风险与防御指南 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

自己电脑做局域网网站服务器专门做app的公司有哪些

计算机常识 计算机如何存储数据 计算机世界中只有二进制。那么在计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。 进制 进制也就是进位计数制&#xff0c;是人为定义的带进位的计数方法 实例&#xff1a; // 在java 中 可以使用不同…

中山网站建点东营招标建设信息网

OSPF NSSA实验简述 1、OSPF NSSA区域配置 为解决末端区域维护过大LSDB带来的问题&#xff0c;通过配置stub 区域或totally stub区域可以解决&#xff0c;但是他们都不能引入外部路由场景。 No so stuby area &#xff08;区域&#xff09;NSSA 可以引入外部路由&#xff0c;支持…

书籍网站建设的目的360网站制作潍坊

文章目录1. 题目2. 解题1. 题目 给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如&#xff0c;序列 [4,6,16] 的最大公约数是 2 。 数组的一个 子序列 本质是一个序列&#xff0c;可以通过删除数组中的某些元素…

长沙做企业网站的公司wordpress加载谷歌

一、梯度消失与爆炸 在神经网络中&#xff0c;梯度消失和梯度爆炸是训练过程中常见的问题。 梯度消失指的是在反向传播过程中&#xff0c;梯度逐渐变小&#xff0c;导致较远处的层对参数的更新影响较小甚至无法更新。这通常发生在深层网络中&#xff0c;特别是使用某些激活函…

gitee 使用安装教程

一、下载方式 1.官网下载https://git-scm.com/downloads 2.淘宝镜像下载https://registry.npmmirror.com/binary.html?path=git-for-windows/2.1安装 1.点击刚刚下载的安装包,然后点击next 2.根据自己的情况选择,一…

2025工业网线厂家权威推荐榜:千兆/拖链/高柔/网线/六类/超五类/6类/超5类/千兆/超六类/8芯/4芯/成品/相机/视觉数据工业网线高强屏蔽与稳定传输实力之选

在工业4.0和智能制造快速发展的今天,工业网络作为数字基础设施的核心组成部分,其稳定性与可靠性直接关系到生产系统的运行效率。工业网线作为网络传输的物理载体,不仅需要具备优异的信号传输性能,更要能在恶劣的工…

VisualMimic——基于视觉的人形行走-操作控制:低层策略负责平衡控制且跟踪高层下发的指令、高层策略则基于自我中心视觉输入生成任务跟踪指令 - 实践

VisualMimic——基于视觉的人形行走-操作控制:低层策略负责平衡控制且跟踪高层下发的指令、高层策略则基于自我中心视觉输入生成任务跟踪指令 - 实践pre { white-space: pre !important; word-wrap: normal !importan…

g4560做网站服务器网络舆情的应对及处理

用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回 -1 ) 示例 1&#xff1a; 输入&#xff1a; ["…

套用模板网站哪里有做网站培训的

题目 不使用任何内建的哈希表库设计一个哈希映射&#xff08;HashMap&#xff09;。 实现 MyHashMap 类&#xff1a; MyHashMap() 用空映射初始化对象 void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中&#xff0c;则更新…