递归算法一篇文通俗易懂快速掌握

简介: - 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
  • A方法调用B方法,我们很容易理解!

递归就是:A方法调用A方法!就是自己调用自己

  • 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为

一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所
需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象
的无限集合。

  • ==递归结构包括两个部分:

递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
递归体:什么时候需要调用自身方法。==

错误实例

  1. 控制台报错StackOverflowError栈溢出了, 什么意思 自己调用自己,电脑内存不够了 栈溢出,非常可怕的一个异常不要这样搞,他不是这样使用的!
  2. 那么为何还要用递归呢?
    2.1.能解释一些东西,能解决一些问题
public class Demo {
    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.test();
    }
    //这个方法他没有头会进入死循环,出不来不停的调用停止不来
    public void test(){
        test();
    }
}

1673476750310.png

正确实例

学过阶乘吧
2! 2x1
3! 3x2x1
5!5x4x3x2x1

public class Demo {
    public static void main(String[] args) {
        System.out.println(f(5));
    }
    //传几就调用几直到调用到1为止
    // 1!1 还是1的本身数字
    // 2!2*1 直到调用到1为止
    // 5!5*4*3*2*1 直到调用到1为止
    //假设:2! 传递的参数是2那么他进入的是else方法因为传递参数不等于1,1!传递的参数是1他就进入的是if的方法因为传递等于1
    public static int f(int n){
    // 2!2*1
    // 3!3*2*1
    // 4!4*3*2*1
    // 5!5*4*3*2*1
    //一层一层的往上调直到传递的参数等于1时才会结束返回1
    //判断如果这个n传递的参数等于1的时候就让他等于1,因为1的阶乘就是他的本身
        if(n == 1){
            return 1;
        }else{
            //传递参数不等于1会进入这个方法
             //列:return n*f(n-1)
            //n就是传递过来的参数2
            //*f(n-1)在调用自己的方法f(int n)
            //2*f(n-1)不就是2*f(2-1) = f(1) = 1
            //所以返回结果2*f(1) = 2, 就相当于2*1 = 2
            return n*f(n-1);//结果就是:2*f(2-1) = 2
        }
    }
}

递归图文
1673476732337.png

相关文章
|
存储 人工智能 算法
【AcWing算法基础课】第四章 数学知识(未完待续)(3)
根据下面公式来预处理出等式右边的组合数的值,那么等式左边就可以用等式右边已经算过的值来进行计算(有点像dp)。
80 0
|
2月前
【剑指offer】编程习题集附上答案
【剑指offer】编程习题集附上答案
16 3
|
7月前
|
机器学习/深度学习 算法
【软件设计师】通俗易懂的去了解算法的时间复杂度
【软件设计师】通俗易懂的去了解算法的时间复杂度
|
7月前
|
机器学习/深度学习 算法 C语言
【C言专栏】递归算法在 C 语言中的应用
【4月更文挑战第30天】本文介绍了递归算法在C语言中的应用,包括基本概念(通过调用自身解决子问题)、特点(调用自身、终止条件、栈空间)和实现步骤(定义递归函数、分解问题、设置终止条件、组合解)。文中通过阶乘计算和斐波那契数列两个案例展示了递归的使用,强调了递归可能导致的栈溢出问题及优化需求。学习递归有助于理解和应用“分而治之”策略。
105 0
|
算法
代码随想录算法训练营第二十九天 | 回溯算法总结
代码随想录算法训练营第二十九天 | 回溯算法总结
51 0
|
人工智能 算法
【AcWing算法基础课】第四章 数学知识(未完待续)(1)
利用秦九韶算法来实现其他进制转十进制的结果求解
78 0
|
存储 算法 搜索推荐
C 单链表及其相关算法 万字详解(通俗易懂)
C 数据结构与算法入门——单链表 内容分享(包含单链表常见算法的讲解)。
63 0
C 单链表及其相关算法 万字详解(通俗易懂)
|
存储
《操作系统概论》第一遍阅读
前言: 《操作系统概论》从操作系统实现资源管理的观点出发,产生如何对计算机系统中的软硬件资源进行管理,要求我们理解操作系统要做什么,怎么样去做。学习操作系统概论是在米老师给我们讲完《信息资源管理》学习后按照老师所讲的方法来学习的,所以这次阅读,都是按照老师的指导一步一脚一脚印完成的。感觉很好。
leetcode14(弄懂了一个知识点)
这个题有一点细节,所以就记录一下(可能不一定准确)
78 0
|
算法 Windows
C 递归 详解(通俗易懂)
C 数据结构与算法入门——递归 内容分享。
86 0