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

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

一文搞懂递归调用

递归是什么

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


简单递归示例代码

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编程大赛)


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


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

相关文章
|
6月前
|
存储 搜索推荐 算法
Java数组全套深入探究——进阶知识阶段2、冒泡排序
Java数组全套深入探究——进阶知识阶段2、冒泡排序
78 0
|
机器学习/深度学习 算法 图计算
【再谈动态规划】
【再谈动态规划】
|
6月前
|
存储 缓存 算法
【数据结构与算法】【小白也能学的数据结构与算法】递归 分治 迭代 动态规划 无从下手?一文通!!!
【数据结构与算法】【小白也能学的数据结构与算法】递归 分治 迭代 动态规划 无从下手?一文通!!!
|
5月前
|
存储 C++
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
50 7
|
6月前
|
存储 算法 JavaScript
递归的递归之书:引言到第四章
递归的递归之书:引言到第四章
187 0
|
6月前
|
算法
二分查找算法的细节刨析 --适合有基础的朋友阅读
二分查找算法的细节刨析 --适合有基础的朋友阅读
|
6月前
|
搜索推荐 Java 程序员
Java数组全套深入探究——进阶知识阶段1、选择排序
Java数组全套深入探究——进阶知识阶段1、选择排序
50 0
|
6月前
|
算法 程序员
「程序员必须掌握的算法」双指针「上篇」
「程序员必须掌握的算法」双指针「上篇」
|
11月前
|
存储 程序员 C语言
指针一些关键知识点和难点的总结
指针一些关键知识点和难点的总结
76 0
|
算法 程序员 C语言
【C语言】递归实战,通过几个例子带你深入走进递归算法
【C语言】递归实战,通过几个例子带你深入走进递归算法
498 0
下一篇
无影云桌面