【Java递归】一篇文章带你了解,什么是递归 ,递归的特点,递归应用场景,递归练习题

news/2024/12/22 2:29:15/

在这里插入图片描述

博主:東方幻想郷
专栏分类:Java | 从入门到入坟

Java递归

  • ⭐ 递归的定义
  • ⭐ 递归的特点
  • ⭐ 递归应用场景
  • ⭐ 简单例子
  • ⭐ 递归练习题
    • 🌌 练习题模板
    • 🏴‍☠️ 练习题答案:

⭐ 递归的定义

🌟递归是一种在方法通过调用自身来解决某些问题的技术,它可以将一些问题,分为更小,更细类似的子问题,逐步解决,直到问题被简化到某个基本情况,最后可以直接拿到答案。

⭐ 递归的特点

  1. 递归是一种函数调用自身的方法
  2. 递归函数中,必须要有一个停止递归的条件,否则将会一直循环(return)
  3. 递归可以使代码更加简洁

⭐ 递归应用场景

  1. 一些树,图,需要使用到递归函数,遍历整个数据结构
  2. 数学问题:例如求阶乘、斐波那契数列等

⭐ 简单例子

我们来看一个非常简单的例子,递归求解1~n的和

在递归算法中,基线条件是指当递归函数调用到一定深度时,就不再递归调用,而是直接返回结果的情况。基线条件是递归算法的终止条件,如果没有基线条件,递归将会无限进行下去,最终导致栈溢出错误。

public class RecursionExample {public static void main(String[] args) {int n = 10;int sum = sum(n);System.out.println("1~" + n + "的和为:" + sum);}public static int sum(int n) {if (n == 1) {  // 基线条件return 1;} else {  // 递归条件return n + sum(n-1);}}
}

★ 这个程序的输出结果为:

1~10的和为:55

在main方法中,我们定义了n的值为10,然后调用了sum方法,传入了10作为参数。
在sum方法中,我们检查传入的n是否等于1,如果等于1,则返回1,这就是我们所说的基线条件(也就是递归结束的条件).
如果n不等于1,就执行else语句中的代码,也就是返回n加上调用sum(n-1)的结果。这就是我们所说的递归条件(也就是递归调用的条件).
sum(n-1)会再次调用sum方法,传入n-1作为参数,然后检查n-1是否等于1,如果等于1,返回1,否则再次执行递归条件.
依此类推,直到n等于1时,递归结束,开始回溯计算所有的结果.
最后返回的结果就是1~n的和.

⭐ 递归练习题

🌌 练习题模板

* 如题:请编写一个递归函数,计算一个整数的阶乘。

* 例如:输入 5,输出 120(5! = 5 × 4 × 3 × 2 × 1 = 120)

// 练习代码
public class Factorial {public static int factorial(int n) {// 请答题}public static void main(String[] args) {int n = 5;System.out.println(n + "! = " + factorial(n));}
}

🏴‍☠️ 练习题答案:

public class Factorial {public static int factorial(int n) {if (n == 0 || n == 1) { // 基线条件return 1;} else {return n * factorial(n - 1); // 递归条件}}public static void main(String[] args) {int n = 5;System.out.println(n + "! = " + factorial(n));}
}

当前计算阶乘的 factorial 方法中,如果n == 0 或 n == 1,则返回为 1
若基线条件不成立,则会走递归条件,并开始计算n的阶乘
若当n = 5 时,return为
5 * 4 * 3 * 2 * 1

🌟 总的一句话概括:递归就是自己调用自己,完成数据的实现过程,拿到返回结果


http://www.ppmy.cn/news/91065.html

相关文章

02-Python列表入门【100个Python知识点】

Python是一种通用的高级编程语言,它特别适合于数据分析、机器学习、网络编程以及自动化脚本等方面的使用。在Python中,有一种非常强大的数据结构叫做列表(List)。今天,我们将介绍Python列表的基本概念,以及…

二、软件工程——Modeling

1.Undestanding Requirements System Engineering(系统工程) !!!Requirements Engieering(需求建模) 1.Inception(开始):(确认利益相关者) 2.…

支撑企业未来10年高增长,用友资金管理平台助力新零售企业逆境破局

随着大数据、云服务、5G等技术的深化发展,人们消费观念及需求逐渐变化,我国新零售业数字化进程不断加快。近年来,新零售已经不仅局限于单一的零售范畴,逐步演变为集零售、快递物流、金融科技、企业服务、人工智能等各行各业为一体…

Tensorflow2基础代码实战系列之时间序列预测任务

深度学习框架Tensorflow2系列 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark …

Flume系列:Flume常用采集通道案例

目录 Apache Hadoop生态-目录汇总-持续更新 1: 文件->flume->kafka 2: kafka->flume->hdfs (方案一) 3: kafka->flume->hdfs (方案二) Apache Hadoop生态-目录汇总-持续更新 系统环境:centos7 Java环境:Java8 1: 文件->flume…

Nodejs项目包发布

目录 一、安装node和npm二、安装nrm三、注册npm四、发布 一、安装node和npm 下载nodejs压缩包 $ wget https://nodejs.org/download/release/v14.21.3/node-v14.21.3-linux-x64.tar.gz解压nodejs压缩包 $ tar -xzvf node-v14.21.3-linux-x64.tar.gz && cd node-v14.…

Windows http https的搭建

目录 搭建http站点 ​编辑 报错 网站端口更改 可能存在的报错 绑定主机名 端口为80的情况下 绑定的端口不为80的情况下 https站点搭建 CA机构证书可以给其他服务器使用,不过要用导出导入的行书,不能直接使用cer文件 搭建http站点 ①勾选IIS ②一…

君子签电子签章助推企业实现印章“集中统一管控”和“分级分权管理”

对于中大型企业来说,印章管理一直以来都是个“老大难”问题。 在中大型企业,印章数量多,大多分散在各个分/子公司的各个部门,企业印章无法统一进行有效管理。印章分散各地,异地分/子公司跨区域盖章难;分/子…