当前位置: 首页 > news >正文

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的阶乘 &#xff08;1&#xff09;解析题目意思 比如求5的阶乘&#xff0c;符号表示就是5&#xff01;&#xff1b;所以5&#xff01;5*4*3*2*1我们下面使用简单的…...

android 闪屏图适配尺寸

不同的 Android 设备可能具有不同的屏幕尺寸和分辨率&#xff0c;因此最好提供不同尺寸的启动画面图像&#xff0c;以确保与各种设备的兼容性。 以下是 Android 启动画面图像的一些最常见尺寸&#xff1a; 320 x 480像素&#xff08;肖像&#xff09; 480 x 320像素&#xff0…...

正则表达式中(?s)与(?m)的区别

理论&#xff1a; (?m) 和 (?s) 是正则表达式中的两个模式标志&#xff0c;它们具有不同的作用&#xff1a; (?m) 多行模式标志&#xff08;也称为 “multiline” 模式&#xff09;&#xff1a; 默认情况下&#xff0c;正则表达式将整个输入字符串视为单行多行文本中使用…...

Clickhouse学习笔记(11)—— 数据一致性

使用合并树引擎时&#xff0c;无论是ReplacingMergeTree还是SummingMergeTree&#xff0c;都只能保证数据的最终一致性&#xff0c;因为数据的去重、聚合等操作会在数据合并的期间进行&#xff0c;而合并会在后台以一个不确定的时间进行&#xff0c;因此无法预先计划&#xff1…...

【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组件&#xff0c;显示了一个Antd Table组件&#xff0c;设置了一个columns变量并复制给Table的columns属性&#xff0c;由于我们请求的datasource来源是异步的&#xff0c;示例伪代码如下&#xff1a; const [columns, setColumns] useState([]); /…...

ChatGPT的图识别来了

前几天ChatGPT推出了Dall-E 3功能&#xff0c;可以根据文字和描述一段话来生成一个或者一组图。 这次又来重磅了&#xff0c;图识别又来了&#xff01;换句话说&#xff0c;也即是文生图&#xff0c;图生文都可以实现了&#xff0c;一起来试试 1、解释图中的意思 &#xff0…...

java Stream编程笔记

文章目录 Stream介绍什么是 Stream&#xff1f; Stream中间操作过滤操作&#xff08;filter&#xff09;映射操作&#xff08;map&#xff09;排序操作&#xff08;sorted&#xff09;截断操作&#xff08;limit 和 skip&#xff09; Stream 的终止操作forEach 和 peek聚合操作…...

顶顶通语音识别使用说明

介绍 顶顶通语音识别软件(asrproxy)是一个对接了多种语音识别接口的语音识别系统。可私有化部署(支持中文英文和方言等&#xff0c;支持一句话识别、实时流识别、多声道录音文件识别。 原理 asrproxy内嵌了阿里达摩院的开源语音识别工具包FunASR,后续我们也会使用自有的预料…...

重磅发布 OpenAI 推出用户自定义版 ChatGPT

文章目录 重磅发布 OpenAI 推出用户自定义版 ChatGPT个人简介 重磅发布 OpenAI 推出用户自定义版 ChatGPT OpenAI 首届开发者大会 (OpenAI DevDay) 于北京时间 11 月 7 日凌晨 02:00 开始&#xff0c;大会上宣布了一系列平台更新。其中一个重要更新是用户可以创建他们自己的自定…...

Java 幼儿园(20231111)读取 json 文件

1、功能场景 &#xff08;1&#xff09;多人合作开发一个功能模块时&#xff0c;需要调用外部接口 &#xff08;2&#xff09;对方接口的开发工作还没有完成&#xff0c;只能提供一个返回值的示例文件 json 文件。 &#xff08;3&#xff09;返回的 json 数据多达几百个字段。 …...

云计算、大数据技术的智慧工地,实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式

智慧工地是利用物联网、云计算、大数据等技术&#xff0c;实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式。 智慧工地架构&#xff1a; 1、终端层&#xff1a; 充分利用物联网技术、移动应用、智能硬件设备提高现场管控能力。通过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 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容在Linux环境下&#xff…...

亚马逊云AI应用科技创新下的Amazon SageMaker使用教程

目录 Amazon SageMaker简介 Amazon SageMaker在控制台的使用 模型的各项参数 pytorch训练绘图部分代码 Amazon SageMaker简介 亚马逊SageMaker是一种完全托管的机器学习服务。借助 SageMaker&#xff0c;数据科学家和开发人员可以快速、轻松地构建和训练机器学习模型&#…...

Eigen:旋转向量(Angle-Axis)转换为四元素和旋转矩阵

0. 在固定欧拉角系下。 绕固定系旋转&#xff0c;旋转的先后顺序为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#通过泛型来促进代码重用&#xff0c;在词义上等价于C模板。 在泛型编程中&#xff0c;数据类型也是一种参数。 12.1如果C#没有泛型 为object的方法使用值类型时&#xff0c;“运行时”将自动对它进行装箱&#xff0c;获取值类型的实例时则需要…...

Python与ArcGIS系列(七)自动化打印地图

目录 0 简述1 获取可用打印机列表2 打印地图3 导出地图至PDF4 导出地图至图像0 简述 本篇介绍如何利用arcpy实现获取可用打印机列表、打印地图、导出地图至PDF和图像。 1 获取可用打印机列表 通过arcpy提供的ListPrinterNames()函数可以生成可用的打印机列表。 import arcpy.m…...

基于STM32单片机抢答器设计

**单片机设计介绍&#xff0c; 基于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冯…...

【效率工具箱】构建你的强化学习Python实用工具库:可视化、存储与可复现性

1. 为什么你需要一个强化学习工具库 刚开始做强化学习实验那会儿&#xff0c;我经常遇到这样的场景&#xff1a;好不容易调通了一个算法&#xff0c;结果发现训练曲线画出来全是乱码&#xff1b;跑完实验想保存数据&#xff0c;结果文件散落在七八个不同目录&#xff1b;复现上…...

造相Z-Image小白友好教程:无需代码基础,网页界面直接操作生成

造相Z-Image小白友好教程&#xff1a;无需代码基础&#xff0c;网页界面直接操作生成 1. 快速了解造相Z-Image 造相Z-Image是阿里通义万相团队开源的一款强大的文生图扩散模型&#xff0c;拥有20亿级参数规模。这个模型最大的特点就是能够生成768768及以上分辨率的高清图像&a…...

NVIDIA Profile Inspector终极指南:解决572.16驱动兼容性问题

NVIDIA Profile Inspector终极指南&#xff1a;解决572.16驱动兼容性问题 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为NVIDIA显卡驱动更新后游戏性能异常而烦恼吗&#xff1f;近期许多用户反馈…...

AI Agent在游戏NPC中的革命:从脚本行为到自主人格生成

AI Agent在游戏NPC中的革命:从脚本行为到自主人格生成 关键词:AI Agent、游戏NPC、脚本行为、自主人格、行为树、大语言模型、游戏开发 摘要:本文将深入探讨AI Agent技术如何革命性地改变游戏NPC的设计与实现。我们将从传统的脚本行为开始,一步步演进到基于大语言模型的自主…...

Z-Image-GGUF文生图模型实战:电商海报、社交配图一键生成教程

Z-Image-GGUF文生图模型实战&#xff1a;电商海报、社交配图一键生成教程 1. 快速开始&#xff1a;30秒生成你的第一张AI图片 你是不是也好奇&#xff0c;那些精美的AI生成图片是怎么做出来的&#xff1f;今天&#xff0c;我就带你用Z-Image-GGUF这个开源模型&#xff0c;30秒…...

Qwen2-VL-2B-Instruct与Vue3集成指南:构建智能前端应用

Qwen2-VL-2B-Instruct与Vue3集成指南&#xff1a;构建智能前端应用 用最简单的方式&#xff0c;让AI视觉能力为你的Vue应用赋能 1. 开篇&#xff1a;为什么要在Vue里集成视觉AI&#xff1f; 最近一直在折腾各种AI模型&#xff0c;发现Qwen2-VL-2B-Instruct这个多模态模型确实有…...

应届生面试:面试官最讨厌的5种回答

文章目录前言一、"我愿意学习" —— 最廉价的废话二、"这是组长分配的&#xff0c;我不知道为啥" —— 甩锅侠转世三、"我没什么特长&#xff0c;就是比较踏实" —— 凡尔赛式自卑四、答非所问&#xff0c;自说自话 —— 沉浸在自己的世界里五、…...

如何完整备份QQ空间历史说说:GetQzonehistory的终极解决方案

如何完整备份QQ空间历史说说&#xff1a;GetQzonehistory的终极解决方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心那些记录青春点滴的QQ空间说说会随着时间流逝而消失…...

为什么92%的AI团队还在用传统Scrum硬扛?:揭秘LLM驱动开发下的3层敏捷解耦新模型

第一章&#xff1a;AI原生软件研发敏捷开发方法适配 2026奇点智能技术大会(https://ml-summit.org) AI原生软件的研发范式正从根本上挑战传统敏捷开发的边界——模型迭代、数据漂移、提示工程验证与系统级可观测性耦合&#xff0c;使Scrum的固定Sprint节奏与用户故事拆分逻辑面…...

FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了!缴

正文 异步/等待解决了什么问题&#xff1f; 在传统同步I/O操作中&#xff08;如文件读取或Web API调用&#xff09;&#xff0c;调用线程会被阻塞直到操作完成。这在UI应用中会导致界面冻结&#xff0c;在服务器应用中则造成线程资源的浪费。async/await通过非阻塞的异步操作解…...