Java方法06:递归

news/2024/11/18 9:35:44/文章来源:https://www.cnblogs.com/Konon/p/18349753

A方法调用B方法,我们很容易理解!

递归就是:A方法调用A方法!就是自己调用自己,因此我们在设计递归算法时,一定要指明什么时候自己不调用自己。否则,就是个死循环!

递归算法重点:

递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。

利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

递归结构包括两个部分:

  1. 递归头。解释:什么时候不调用自身方法。如果没有头,将陷入死循环。
  2. 递归体。解释:什么时候需要调用自身方法。

【演示:利用代码计算5的乘阶!】

// 5*4*3*2*1
public static void main(String[] args) {System.out.println(f(5));
}public static int f(int n) {if (1 == n) {return 1;} else {return n*f(n-1);}
}

image

此题中,按照递归的三个条件来分析:

  1. 边界条件:阶乘,乘到最后一个数,即1的时候,返回1,程序执行到底;
  2. 递归前进段:当前的参数不等于1的时候,继续调用自身;
  3. 递归返回段:从最大的数开始乘,如果当前参数是5,那么就是5 4,即5 (5-1),即n * (n-1)

递归其实是方便了程序员难为了机器,递归可以通过数学公式很方便的转换为程序。其优点就是易理解,容易编程。但递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。(会占用大量的内存空间)

而迭代虽然效率高,运行时间只因循环次数增加而增加,没什么额外开销,空间上也没有什么增加,但缺点就是不容易理解,编写复杂问题时困难。

能不用递归就不用递归,递归都可以用迭代来代替。

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

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

相关文章

Redis学习笔记_1_基本安装与使用

黑马程序员Redis学习笔记一:Redis基本概念、安装使用、常见命令、Java客户端Redis 入门篇 1 初识Redis Redis是一种 键值型 的 NoSql 数据库键值型:指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json NoSql:相对于传统…

数学

20240806 课件marp: true math: mathjax 数论入门 整除、同余、数论函数、素数………………………… by RenaMoe不讲证明的地方是因为用处不大而且俺也不会,请自行了解。 想要严谨而系统的学习 OI 相关的数学知识的话,建议读《具体数学》。基础概念 oi wiki整除 对于正整数 \…

04 课后题

04 课后题解释以下命令 mkdir /root/dir1 在root下创建一个目录 dir1 touch /root/dir1/file{1..10} 在/root/dir1/file 创建 file1—10 一共十个文件 find /root/dir1 -type f -name "file5" 使用find命令在 /root/dir1目录下 名字叫file5 的文件 find /root/dir1 …

notepad++安装HexEdit插件

notepad++安装HexEdit插件 打开notepad++,选择插件—>插件管理在这里找到HexEdit点击安装就可以点击完,notepad++会自动重启,重启完成就安装好了

用Python简单操作MySQL!轻松实现数据读写

PyMySQL是Python编程语言中的一个第三方模块,它可以让Python程序连接到MySQL数据库并进行数据操作。它的使用非常简单,只需要安装PyMySQL模块,然后按照一定的步骤连接到MySQL数据库即 可。本文将介绍PyMySQL的安装、连接MySQL数据库、创建表、插入数据、查询数据、更新数据和…

1.13 - 动手学聚类算法

1. 基于距离的k-means聚类,需要人工提供聚簇数量K 1.1 通过肘方法确定最佳聚簇数量import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler from sklearn.datasets import make_blobs, lo…

Linux C++ 开发2 - 编写、编译、执行第一个程序

上一篇《Linux C++ 开发1 - 搭建C++开发环境》我们搭建好了C++的开发环境,本篇我们将编写、编译、执行第一个程序。 1. 第一个C++程序 1.1. demo01.cpp 这里写一个最简单的HelloWord程序 #include <iostream>int main() {std::cout << "Hello, world!" …

洛谷P1194 买礼物之警钟敲爆

洛谷P1194题解传送锚点摸鱼环节 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买 \(B\) 样东西,巧的是,这 \(B\) 样东西价格都是 \(A\) 元。 但是,商店老板说最近有促销活动,也就是: 如果你买了第 \(I\) 样东西,再买第 \(J\) 样,那么就可以只花 \(K_{I,J}\) 元…

CSP16

这题,唯一坑点,子序列是不连续的 注意,子序列可以不连续,子串必须连续。 有一个很显然的暴力点击查看代码 int dp[N][N],n,p[N],q[N]; int main() {speed();freopen("in.in","r",stdin);freopen("out.out","w",stdout);cin>>n…

潜在新就业岗位超300万个 原生鸿蒙开发创造百万级人才缺口

在数字化转型的浪潮中,开发者作为数字经济的建设者和创新者,成为了推动社会进步的重要⼒量。InfoQ 研究中⼼最新发布的《中国开发者画像洞察研究报告2024》显示,截至2023年年底,中国泛开发者⼈数高达2067.21万,增速为2.5%。在这2000多万人中,鸿蒙⽣态吸引了超过254万开发…

python numpy

import numpy as np a=np.array([1,2,3,4]) b=np.array([5,6,7,8]) #相应项相乘再相加 print(np.inner(a,b)) #a的每一项乘以b的每一项组成新的矩阵 print(np.outer(a,b))

开发者洞察报告:百万级鸿蒙岗位缺口,开发者薪资涨幅43.1%

最近,极客邦科技双数研究院InfoQ研究中心《中国开发者画像洞察研究报告2024》正式发布,分析了开发者群体在数字经济浪潮中的新趋势与显著变化。根据《国资委79号文件》指示,2027年底,全部国央企必须完成信息化系统的信创改造。而HarmonyOS系统作为国产自研信创软件的代表,…