J2SE--递归调用

2024-08-26 21:32
文章标签 调用 递归 j2se

本文主要是介绍J2SE--递归调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        前段时间在复习J2SE时候看到了“递归”和“迭代”这部分知识,之前没有很好的梳理,这次补上总结。

        一、概念理解:

        (1) 递归

      “从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……””。

         这个故事永远也讲不完,因为没有递归结束条件,如果递归没有结束条件,那么就会无限递归下去。

         其实递归很简单,形式上一个递归结束条件,一个自己调用自己的方法

 

        (2)迭代

          迭代是重复一组指令,不断第根据变量的旧值推出新值,最终得到所需的解。


        二、对比

       用一个求等差数列前N项和的例子:1+2+3+4……

       对于递归:

       sum(5)

      5+sum(4)

      5+4+sum(3)

      5+4+3+sum(2)

      5+4+3+2+sum(1)

      5+4+3+2+1+sum(0)

      5+4+3+2+1+0

      5+4+3+2+1

      5+4+3+3

      5+4+6

      5+10

      15

       可以观察到,递归调用是一个先扩展后收缩的过程,即先进行递推,之后进行回归,类似于我们在软考中所学到的“分治法”,大问题化小问题,小问题解决之后再综合求解大问题。

       如图--J2SE视频举例:一定是走到最深处之后,才进行返回。

                         

 

        然而对于迭代方法:           

         0+1=1

        1+2=3

        3+3=6

        6+4=10

        10+5=15

       用计算出的结果当做新值继续计算,得到最终结果,这个过程更像是一条直线,把后面的线段拿到前面,不断地前进,没有扩张和收缩的过程。

       从如上对比中,可以看到“递归”在执行过程中,会有一个扩充再收缩的过程,很容易让人联想到化学课上的“链式反应”,不易受控制,正如概念中所提到的,递归“一个终止条件、一个自身调用”, 一旦终止条件不对,扩张过程加大,容易导致“溢出”错误,而迭代则是直线式进行,在资源上不会出现这种情况。

       而之所以会出现溢出,使用递归时每调用一次,就需要在栈上开辟一块空间,而使用迭代时,不会这样,因为仅仅是重复调用某一个过程,所以相比之下,使用迭代更加安全。

      然而,在我们使用算法过程中,像之前学习过的回溯法、分治法,都用到了递归调用,在数据结构中,树的遍历,图的搜索,也都是递归,这当然另当别论,一般情况下,能使用迭代,就少用递归。



 

 

这篇关于J2SE--递归调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109733

相关文章

在C#中调用Windows防火墙界面的常见方式

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家... 目录引言1. 直接启动防火墙界面(1) 打开基本防火墙设置(firewall.cpl)(2) 打开高

python调用dubbo接口的实现步骤

《python调用dubbo接口的实现步骤》本文主要介绍了python调用dubbo接口的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录 ​​其他实现方式与注意事项​​ ​​高级技巧与集成​​用 python 提供 Dubbo 接口

C# FTP调用的实现示例

《C#FTP调用的实现示例》本文介绍了.NET平台实现FTP/SFTP操作的多种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 .NET 自带 FtpWebRequest 实现 FTP 操作1.1 文件上传1.2

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四