java数据结构和算法——递归(Recursion)的介绍
程序员文章站
2024-02-11 21:29:34
...
一、递归(Recursion)的概念
- 递归就是方法自己调用自己,每次调用时传入不同的变量.
- 递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。
二、递归(Recursion)的调用机制
1、递归的调用机制示例图解如下:
2、递归的调用机制简单的示例代码如下:
package com.rf.springboot01.dataStructure.recursion;
/**
* @description: 递归调用示例
* @author: xiaozhi
* @create: 2020-07-30 14:42
*/
public class RecursionTest {
public static void main(String[] args) {
System.out.println("打印问题的输出结果=========");
test(4);
System.out.println("阶乘问题的输出结果=========");
int result=test2(5);
System.out.println(result); //1*2*3*4*5
}
/**
* @Description: 打印问题
* @Param: [n]
* @Author: xz
* @return: void
* @Date: 2020/7/30 14:43
*/
public static void test(int n) {
if (n > 2) {
test(n - 1);
}
System.out.println("n=" + n);
}
/**
* @Description: 阶乘问题
* @Param: [n]
* @Author: xz
* @return: int
* @Date: 2020/7/30 14:44
*/
public static int test2(int n) {
if (n == 1) {
return 1;
} else {
return test2(n - 1) * n;
}
}
}
三、递归(Recursion)能解决什么样的问题
- 各种数学问题如: 8皇后问题 , 汉诺塔, 阶乘问题, 迷宫问题等
- 各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等.
- 使用栈解决的问题–>递归代码比较简洁
四、递归(Recursion)需要遵守的重要规则
- 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)。
- 方法的局部变量是独立的,不会相互影响, 比如上面示例中的n变量。
- 如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据。
- 递归必须向退出递归的条件逼近,否则就是无限递归,出现*Error。
- 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
下一篇: STL源码剖析—序列式容器—list
推荐阅读
-
java数据结构和算法——递归(Recursion)的介绍
-
带你了解Java数据结构和算法之递归
-
Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例
-
用JAVA语言实现的凝聚式层次聚类算法 ——基于数据结构中的线性结构和树形结构
-
Java中常用数据结构的实现类 Collection和Map 数据结构JavaJ#算法游戏
-
java数据结构和算法中数组的简单入门
-
Java数据结构与算法(三)二叉树的查找和插入
-
数据结构和算法 - 为什么复杂的算法都用java或者c来实现而不是使用php这样子都脚本语言?
-
数据结构-二叉树(求二叉树叶子节点数的递归和非递归算法)
-
数据结构和算法 - 为什么复杂的算法都用java或者c来实现而不是使用php这样子都脚本语言?