热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

耿老师带你深入Java学习:掌握递归与迭代的精髓

耿老师寄语本文通过大家熟悉的Fibonacci序列 ,描述用“迭代法”求解Fibonacci序列更容易被理解,而用“递归”求解(不同于通常教材的递归算法,但效率更高)更难理解php递归算法。 神理解递

耿老师寄语

本文通过大家熟悉的Fibonacci序列 ,描述用“迭代法”求解Fibonacci序列更容易被理解,而用“递归”求解(不同于通常教材的递归算法,但效率更高)更难理解php递归算法

神理解递归php递归算法,人理解迭代

耿祥义

本文通过大家熟悉的Fibonacci序列(前两项都是1php递归算法,以后每项是前两项的和)

1 1 2 3 5 8 13 21 34 55 89... ...

来描述用“迭代法”求解Fibonacci序列更容易被理解,而用“递归”求解(不同于通常教材的递归算法,但效率更高)更难理解php递归算法

1.递归和迭代的特点

"神理解递归,人理解迭代"这句话的出处已经无法查证,但本人非常赞同这句话php递归算法。递归是分治算法的最佳体现,即将规模大的算法问题分解成规模小的算法问题,最终解决规模大的算法问题。

●递归算法有两个主要特点:

(1)算法简洁

代码量很小,逻辑理解相对容易,但对于某些递归,理解算法的内部细是有相当难度的,这就是"神理解递归,人理解迭代"这句话的原因php递归算法

(2)栈溢出(StackOverflow)

递归需要进行函数的压栈和弹栈操作,如果递归深度较大就会占用大量的栈上空间,而且压栈和弹栈都会增加算法的用时php递归算法。因此,递归算法的一个主要问题就是,当递归深度较大过大时,可能会出现栈溢出 (StackOverflow)。对于线性递归,即函数每次只递归 调用本函数一次,时间和空间复杂度都是线性级别O(n),其中n是递归深度。对于非线性递归,即函数每次递归调用本函数多于一次,时间复杂度一定是指数级别O(2^n)(2的n次幂)(空间复杂度是 线性级别O(n)),其效率会随着递归级别的增大而迅速地降低。

● 迭代算法特点

不需要进行函数的不断压栈和弹栈操作,只需保留当前计算的结果,然后计算出下一次的结果后,立刻释放当前结果php递归算法。时间复杂度和空间复杂度依赖所使用的具体算法。迭代算法通常比较凌乱,逻辑上不够简洁。

2.fibonacci序列

● 非线性递归(求Fibonacci序列第n项)

传统递归,大学教材均采用,逻辑上好理解,算法简洁,细节也相对好理解php递归算法

展开全文

代码如下:

● 线性递归(求Fibonacci序列第n项)

非传统递归,本人未见大学教材采用,可在某些算法著作中见到线性递归求Fibonacci序列第n项php递归算法。算法简洁,但逻辑和细节-“神理解”。

代码如下:

● 迭代法(求Fibonacci序列第n项)

许多大学教材采用,算法不简洁,但有利去理解线性递归php递归算法

代码如下:

耿老师教你学Java:神理解递归,人理解迭代

MainClass.java

Fibonacci.java

耿祥义主要教材源代码暨习题解答下载


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
author-avatar
zpcbb80569
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有