一文带你解开“递归算法”的奥秘

先赞后看养成习惯!

在这里插入图片描述

学习一个新的东西,肯定需要先大概了解一下它是什么?然后我们还有知道学习它有什么用?其次我们要知道它的优缺点,这样有助于我们更好的选择何时使用它。下面就让我们带着这三点开始今天的文章。

讲递归算法时会涉及到“栈”数据结构的一些知识,如果有不太了解的可以点这里

概述

什么是递归

简单来说递归就是方法自己调用自己,每次调用时传入不同的变量。一直到程序执行到指定的出口时停止调用本身,并将结果层层返回。

递归的作用和优点

递归的核心思想就是将一个大问题,拆解成一个小问题,然后将小问题再次拆解,层层拆分从而简化问题。这种设计理念可以简化重复的代码让程序变得更加简洁。

递归的缺点

使用递归算法时每次方法的调用都需要在栈中开辟出一个空间保存相关数据,频繁的压栈、弹栈会导致效率变低。

递归使用注意事项

1、使用递归算法解决问题必须要有出口,不然就形成死循环了。好好的递归变成了“死归”!

2、递归的调用次数不宜过多不然会造成栈溢出。

总结

能通过循环解决的问题尽量不要使用递归,循环要比递归的效率高很多。再者我们需要知道任何技术都会有它的利弊,当我们享受其优点的时候也要考虑其不足之处,从而使我们的程序更加优秀。

在这里插入图片描述

代码演示

通过上面的介绍想必大家已经对递归有了一个初步的认知。下面让我们通过一个小例子来加深对递归的理解。

在这里插入图片描述

问题:求n的阶乘是多少?

阶乘的含义:一个正整数的阶乘是所有小于以及等于该数的正整数的积。(简单介绍一下预防有不太清楚其含义的)

代码实现:

// 使用递归实现阶乘
public class RecursiveDemo {

  public static int factorial(int n) {
    if (n <= 1) {
      return 1;
    } else {
      return factorial(n - 1) * n;
    }
  }

  public static void main(String[] args) {
    System.out.println("3的阶乘是:" + factorial(3));
  }

}

为了让大家看得更加清晰,下面让我们通过一张图来了解一下,以上代码是如何在内存中执行的。

在这里插入图片描述

通过以上的图文介绍,想必大家对递归算法已经有了一个深刻的认识。那么我们学习它有什么用呢?

常见用途

1、通过递归实现斐波那契数列,也就是经常听说的“兔子繁殖”问题。

2、通过递归实现经典的“汉诺塔”和“八皇后”游戏。

3、通过递归实现二叉树的遍历。

3、通过递归删除指定目录下的所有文件,包括文件和文件夹下的文件。

以上就是我总结的一些递归算法常见的应用场景。本文只是简单介绍递归算法,后续的文章中我会为大家仔细介绍在特定的场景下递归算法的实际应用。

今天的文章就到这里了,看都看完了随手点个赞吧!如果文章有哪些地方写得有问题的希望大家可以给我指出来。我会积极改进,谢谢啦!

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/first_M/article/details/106151423