循环与递归的那些事

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

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

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


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


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

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

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

往期精彩:

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

ThreadLocal优化方案

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

一篇文章带你了解MQ


作者介绍:

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

相关文章

用了那么久的 Java For 循环,你知道哪种方式效率最高吗?

作为程序员每天除了写很多 if else 之外,写的最多的也包含 for 循环了,都知道我们 Java 中常用的 for 循环有两种方式,一种是使用 for loop,另一种是使用 foreach,那...

java里的for循环

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

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

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

Java循环:for、foreach与stream性能对比

性能比较如果数据在1万以内的话,for循环效率高于foreach和stream;如果数据量在10万的时候,stream效率最高,其次是foreach,最后是for。另外需要注意的是如果数据达到100万...

Java里的for循环怎么用

前言在前面的文章中,壹哥给大家讲解了顺序结构、分支结构,接下来我们就来学习Java里的循环结构。Java里的循环结构,可以通过while、do-while、for、foreach等方式进行实现,今天壹...

JAVA中for循环优化的思考

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