循环与递归的那些事

createh53个月前 (03-14)技术教程37

大家好,我是贠学文,点击右上方“关注”,每天为您分享java程序员需要掌握的知识点干货。

在任何的编程语言中,循环和递归永远都是一个避不开的话题,因为在某些特定的场景下,用递归确实要比循环简单得多,比如说遍历文件夹目录等等,但是,递归也有下面两个很致命的缺点:

一,效率低。因为递归的过程就是不断地调用自身的方法的过程,而每调用一次方法,都会在栈内存中进行分配空间,创建临时变量等等的操作,而循环是不需要这些额外的操作的,所以递归要比循环的效率低,但是如果递归的层级比较浅的话,这种效率上的差异并不明显。


二,栈内存溢出。在做递归时,每一次调用方法返回的结果,都要依赖于下一次调用的结果,也就是在下一次调用方法,为下一次调用方法分配栈内存空间的时候,本次的调用还没有结束,所以本次的占内存空间不会释放,这样不断的分配栈内存空间,又不释放栈内存空间,如果递归的层级深了,就可能会发生栈内存溢出。


基于以上的考虑,我一般只会在必须同时满足下面两种情况的时候,才会使用递归,其余一律使用循环:

1.在实现某种算法时,用递归会比循环简单很多。
2.需要递归的层级很浅。

当然了,可能有人会说,有些场景,只能用递归实现,无法用循环实现,比如遍历文件夹目录这种。其实并不然,任何的递归都可以转换成循环,下图就是我用java代码实现的,用循环的方式遍历文件夹的功能。

往期精彩:

一篇文章掌握程序员的技术体系

ThreadLocal优化方案

Elasticsearch的核心真的是倒排索引吗?

一篇文章带你了解MQ


作者介绍:

贠学文,具有多有经验的java开发工程师,业余时间利用头条分享技术知识点与自己对技术的感悟,帮助对自己未来感到迷茫的程序员,在技术上得到提升。结识一些志同道合的朋友,相互促进,共同进步。

相关文章

java里的for循环

从字节码角度再来分析一下,java里的for循环是怎么做到的。既然是字节码角度,那一定是在操作栈和局部变量表来实现的。先看一下源代码:很简单的一个代码,循环10次,每次循环打印输出i。我们再使用jav...

Java中的while循环:掌握基础,提升编程效率

在Java编程中,循环结构是控制程序流程的重要工具之一。其中,while循环因其简洁和灵活性,被广泛应用于各种场景。本文将深入探讨while循环的使用方法、常见问题以及优化技巧,帮助你更好地掌握这一基...

JAVA中for循环优化的思考

一、前言最近会使用到很多的数据处理,其中多出使用了for循环操作,于是思考了一下性能和优化相关的东西,遂有此文...二、循环的性能排序在之前的文章中已经对此作了简单的测试,链接:for循环、增强for...

JavaScript for 循环

循环可以将代码块执行指定的次数。 JavaScript 循环 如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的。 我们可以这样输出数组的值: 一般写法:documen...

Java的流程控制语句之循环结构的详解和代码实例。

#秋日生活打卡季#Java的流程控制语句之循环结构分类:1. 顺序结构2. 选择结构3. 循环结构循环语句的组成:初始语句:一条或者多条语句,这些语句完成一些初始化操作判断条件语句:这是一个Boole...