一文搞懂递归调用 ✨ 每日积累

简介: 一文搞懂递归调用 ✨ 每日积累

一文搞懂递归调用

递归是什么

递归做为一种算法在程序设计语言中广泛应用。但是如果没终止条件会造成死循环,所以递归代码里要有结束自调自的条件。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。


简单递归示例代码

public class RecursionTest {
    private void testRecursion(int num){
        if (num > 9){
            testRecursion(num / 10);
        }
        System.out.println(num % 10);
    }
    public static void main(String[] args) {
        new RecursionTest().testRecursion(123);
    }
}

得到的结果

1
2
3


递归调用图解分析

不知道栈和栈帧的可以参考此文章(https://blog.csdn.net/asd1358355022/article/details/119192321),栈是内存结构中的部分结构的组成部分

1.png

局部变量表作用

栈帧中的局部变量表是一组变量值的存储地址,用于存放方法参数和方法内部定义的局部变量。如上图所示我们的方法入参就在局部变量表中存放。


递归可以解决的问题

把一个大问题拆解成一些小问题治之,小问题之间互不影响(栈帧隔离,互不干扰执行自己栈帧的流程)


各种数学问题,如8皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子问题(google编程大赛)


各种算法也会使用到递归,比如快排,归并排序,二分查找,分治算法等。


各种算法也会使用到递归,比如快排,归并排序,二分查找,分治算法等。

相关文章
|
算法
带你读《图解算法小抄》十九、双指针(3)
带你读《图解算法小抄》十九、双指针(3)
|
算法 JavaScript 前端开发
带你读《图解算法小抄》十九、双指针(5)
带你读《图解算法小抄》十九、双指针(5)
|
算法
带你读《图解算法小抄》十九、双指针(4)
带你读《图解算法小抄》十九、双指针(4)
|
8月前
|
存储 缓存 算法
【数据结构与算法】【小白也能学的数据结构与算法】递归 分治 迭代 动态规划 无从下手?一文通!!!
【数据结构与算法】【小白也能学的数据结构与算法】递归 分治 迭代 动态规划 无从下手?一文通!!!
|
7月前
|
存储 C++
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
59 7
|
8月前
|
关系型数据库 C++
【C++高阶(四)】红黑树深度剖析--手撕红黑树!
【C++高阶(四)】红黑树深度剖析--手撕红黑树!
|
算法
带你读《图解算法小抄》十九、双指针(1)
带你读《图解算法小抄》十九、双指针(1)
|
8月前
|
算法 程序员
「程序员必须掌握的算法」双指针「上篇」
「程序员必须掌握的算法」双指针「上篇」
|
算法 JavaScript 前端开发
带你读《图解算法小抄》十九、双指针(2)
带你读《图解算法小抄》十九、双指针(2)
|
数据可视化 算法 Go
go语言|二叉树递归遍历,可能有你没见过的花样玩法
go语言|二叉树递归遍历,可能有你没见过的花样玩法
120 0