Java必刷入门递归题×5(内附详细递归解析图)

目录
1.求N的阶乘
2.求1+2+...+N的和
3.顺序打印数字的每一位
4.求数字的每一位之和
5.求斐波拉契数列
1.求N的阶乘
(1)解析题目意思
- 比如求5的阶乘,符号表示就是5!;所以5!=5*4*3*2*1
- 我们下面使用简单的递归完成本题,看递归代码
public static int sub(int n) {if(n==1) {return 1;}return n * sub(n-1);}
- 下面解析该代码的意思
(2)递归思路
- 拆解算法:6!=6*5!;5!=5*4!;4!=4*3!;3!=3*2!;2!=2*1!;其实也就是6!=6*5*4*3*2*1。
- 用代码表示:整体可能有点乱,需要读者静下心来理解

(3)完整代码
public static void main3(String[] args) {//递归求N的阶乘 int N = 6;int sum = sub(N);System.out.println(sum);}public static int sub(int n) {if(n==1) {return 1;}return n * sub(n-1);}
2.求1+2+...+N的和
(1)解析题目意思
- 假设N=3,意思是求从1加到N的和(1+2+3)
- 假设N=4,则需要求(1+2+3+4)的和
(2)递归思路
- 我们这里以N=3举例
- 思路:求(1+2+3)可以拆解成:3+(求N=2的和),求N=2的和可以拆解成:2+(求N=1的和)
- 得出递归代码
public static int sum(int n) {if(n==1) {return 1;}return n+sum(n-1);}
- 下面剖解递归思路:

(3)完整代码
public static void main(String[] args) {//递归求和int N = 3;int sum = sum(N);System.out.println(sum);}public static int sum(int n) {if(n==1) {return 1;}return n+sum(n-1);}
3.顺序打印数字的每一位
(1)解析题目意思
- 比如打印1234,要题目意思打印的结果就是1 2 3 4(中间隔开)
(2)解析递归思路
- 假设输入的数据是1234,打印出1 2 3 4
- 思路:要打印1 2 3 4,就要先打印1 ,再打印2 3 4 ;打印2 3 4 ,就要先打印2 ,再打印3 4 ;打印3 4,就要先打印3 ,再打印4
- 利用/10去掉最低位,%10得到最低位的思路进行
- 得出递归代码
public static void print(int n) {if(n<10) {System.out.print(n+" ");return;}print(n/10);System.out.print(n%10+" ");}
- 解析递归思路

(3)完整代码
public static void main(String[] args) {//顺序打印数组的每一位int num = 1234;print(num);}public static void print(int n) {if(n<10) {System.out.print(n+" ");return;}print(n/10);System.out.print(n%10+" ");}
4.求数字的每一位之和
(1)解析题目
- 比如给出数字:1345,就需要求1+3+4+5的和
(2)解析递归思路
- 我们这里以求1234的每一位之和
- 同样利用/10去掉最低位,%10得到最低位的思路
- 思路:求1234的每一位之和,可以求4+123的每一位之和;求123的每一位之和,可以求3+12的每一位之和;求12的每一位之和,可以求1+2的每一位之和
- 递归代码
public static int sumEvery(int n) {if(n==1) {return n;}return n%10+sumEvery(n/10);}
- 递归过程解析

(3)完整代码
public static void main(String[] args) {//求数字的每一位之和int N = 1234;int sum = sumEvery(N);System.out.println(sum);}public static int sumEvery(int n) {if(n==1) {return n;}return n%10+sumEvery(n/10);}
5.求斐波拉契数列
(1)了解斐波拉契数列
- 斐波那契数列,其数值为:1、1、2、3、5、8、13、21、34……这个数列从第3项开始,每一项都等于前两项之和。
(2)递归思路求解
- 比如求第五个斐波那契数(5):5=3(第四个数)+2(第三个数);3=2(第三个数)+1(第二个数);以此类推,直到n<=2。
- 递归部分代码
public static int fib(int n) {if(n<=2) {return 1;}return fib(n-2)+fib(n-1);}
- 递归思路解析

- 递归完整代码
public static void main(String[] args) {//斐波拉契int N = 8;int sum = fib(N);System.out.println(sum);}public static int fib(int n) {if(n<=2) {return 1;}return fib(n-2)+fib(n-1);}
(3)迭代思路
- 该思路也就是利用循环去做,可以计算更大的斐波那契数
- 利用:某个数=前面两个数相加,从前面开始往后计算,不断循环即可
- 代码展示:
public static void main(String[] args) {//迭代思路int N = 5;int a = 1;int b = 1;int c = 1;while(N>2) {c = a+b;a = b;b = c;N--;}System.out.println(c);}
- 迭代思路解析:

本次的五道递归题就结束了
相关文章:
Java必刷入门递归题×5(内附详细递归解析图)
目录 1.求N的阶乘 2.求12...N的和 3.顺序打印数字的每一位 4.求数字的每一位之和 5.求斐波拉契数列 1.求N的阶乘 (1)解析题目意思 比如求5的阶乘,符号表示就是5!;所以5!5*4*3*2*1我们下面使用简单的…...
android 闪屏图适配尺寸
不同的 Android 设备可能具有不同的屏幕尺寸和分辨率,因此最好提供不同尺寸的启动画面图像,以确保与各种设备的兼容性。 以下是 Android 启动画面图像的一些最常见尺寸: 320 x 480像素(肖像) 480 x 320像素࿰…...
正则表达式中(?s)与(?m)的区别
理论: (?m) 和 (?s) 是正则表达式中的两个模式标志,它们具有不同的作用: (?m) 多行模式标志(也称为 “multiline” 模式): 默认情况下,正则表达式将整个输入字符串视为单行多行文本中使用…...
Clickhouse学习笔记(11)—— 数据一致性
使用合并树引擎时,无论是ReplacingMergeTree还是SummingMergeTree,都只能保证数据的最终一致性,因为数据的去重、聚合等操作会在数据合并的期间进行,而合并会在后台以一个不确定的时间进行,因此无法预先计划࿱…...
【uniapp】六格验证码输入框实现
效果图 代码实现 <view><view class"tips">已发送验证码至<text class"tips-phone">{{ phoneNumber }}</text></view><view class"code-input-wrap"><input class"code-input" v-model"…...
【react hook】在react hook组件中,使用Antd Table组件,columns数据异步获取,list数据更新但没有rerender解决办法
情景描述 我们有一个react组件,显示了一个Antd Table组件,设置了一个columns变量并复制给Table的columns属性,由于我们请求的datasource来源是异步的,示例伪代码如下: const [columns, setColumns] useState([]); /…...
ChatGPT的图识别来了
前几天ChatGPT推出了Dall-E 3功能,可以根据文字和描述一段话来生成一个或者一组图。 这次又来重磅了,图识别又来了!换句话说,也即是文生图,图生文都可以实现了,一起来试试 1、解释图中的意思 ࿰…...
java Stream编程笔记
文章目录 Stream介绍什么是 Stream? Stream中间操作过滤操作(filter)映射操作(map)排序操作(sorted)截断操作(limit 和 skip) Stream 的终止操作forEach 和 peek聚合操作…...
顶顶通语音识别使用说明
介绍 顶顶通语音识别软件(asrproxy)是一个对接了多种语音识别接口的语音识别系统。可私有化部署(支持中文英文和方言等,支持一句话识别、实时流识别、多声道录音文件识别。 原理 asrproxy内嵌了阿里达摩院的开源语音识别工具包FunASR,后续我们也会使用自有的预料…...
重磅发布 OpenAI 推出用户自定义版 ChatGPT
文章目录 重磅发布 OpenAI 推出用户自定义版 ChatGPT个人简介 重磅发布 OpenAI 推出用户自定义版 ChatGPT OpenAI 首届开发者大会 (OpenAI DevDay) 于北京时间 11 月 7 日凌晨 02:00 开始,大会上宣布了一系列平台更新。其中一个重要更新是用户可以创建他们自己的自定…...
Java 幼儿园(20231111)读取 json 文件
1、功能场景 (1)多人合作开发一个功能模块时,需要调用外部接口 (2)对方接口的开发工作还没有完成,只能提供一个返回值的示例文件 json 文件。 (3)返回的 json 数据多达几百个字段。 …...
云计算、大数据技术的智慧工地,实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式
智慧工地是利用物联网、云计算、大数据等技术,实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式。 智慧工地架构: 1、终端层: 充分利用物联网技术、移动应用、智能硬件设备提高现场管控能力。通过RFID、传感器、摄像头、手机等终…...
功能案例 -- 通过开关,改变白天和黑夜
效果展示 代码展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>:root {--default-bac-color: #f…...
Linux编写一个极简版本的Shell
Linux编写一个极简版本的Shell 📟作者主页:慢热的陕西人 🌴专栏链接:Linux 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容在Linux环境下ÿ…...
亚马逊云AI应用科技创新下的Amazon SageMaker使用教程
目录 Amazon SageMaker简介 Amazon SageMaker在控制台的使用 模型的各项参数 pytorch训练绘图部分代码 Amazon SageMaker简介 亚马逊SageMaker是一种完全托管的机器学习服务。借助 SageMaker,数据科学家和开发人员可以快速、轻松地构建和训练机器学习模型&#…...
Eigen:旋转向量(Angle-Axis)转换为四元素和旋转矩阵
0. 在固定欧拉角系下。 绕固定系旋转,旋转的先后顺序为X、Y、Z。当然也支持XYZ的任意顺序旋转。 1. 转为四元素 Eigen::Quaterniond q Eigen::AngleAxisd(yaw, Eigen::Vector3d::UnitZ()) *Eigen::AngleAxisd(pitch, Eigen::Vector3d::UnitY()) *Eigen::AngleAxi…...
C#8.0本质论第十二章--泛型
C#8.0本质论第十二章–泛型 C#通过泛型来促进代码重用,在词义上等价于C模板。 在泛型编程中,数据类型也是一种参数。 12.1如果C#没有泛型 为object的方法使用值类型时,“运行时”将自动对它进行装箱,获取值类型的实例时则需要…...
Python与ArcGIS系列(七)自动化打印地图
目录 0 简述1 获取可用打印机列表2 打印地图3 导出地图至PDF4 导出地图至图像0 简述 本篇介绍如何利用arcpy实现获取可用打印机列表、打印地图、导出地图至PDF和图像。 1 获取可用打印机列表 通过arcpy提供的ListPrinterNames()函数可以生成可用的打印机列表。 import arcpy.m…...
基于STM32单片机抢答器设计
**单片机设计介绍, 基于STM32单片机抢答器设计-Proteus仿真 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于STM32单片机的抢答器设计可以用于教育和培训场景中的抢答游戏或考试环节。以下是一个基本的介绍设计步骤…...
冯·诺伊曼体系结构--操作系统
文章目录 1.认识冯诺依曼系统1.1约翰冯诺依曼1.2冯诺依曼结构1.3存储器的读写速度1.4对冯诺依曼结构的认识1.5冯诺依曼结构在生活中的演示 2.操作系统--“搞管理”的软件2.1概念2.2OS存在的意义2.3管理的方式2.4系统调用和库函数概念 1.认识冯诺依曼系统 1.1约翰冯诺依曼 1.2冯…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
【技巧】dify前端源代码修改第一弹-增加tab页
回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码,在知识库增加一个tab页"HELLO WORLD",完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...
