首页 > 编程语言 >Java 递归算法系列:建议收藏的 13 个经典问题的代码实现详解

Java 递归算法系列:建议收藏的 13 个经典问题的代码实现详解

时间:2024-03-30 22:30:42浏览次数:27  
标签:13 遍历 Java 递归 int 详解 numDisks return public

递归算法题

  1. 求阶乘(Factorial)
  2. 斐波那契数列(Fibonacci Sequence)
  3. 汉诺塔(Tower of Hanoi)
  4. 遍历树节点(Tree Traversal)
  5. 数组反转(Array Reversal)
  6. 爬楼梯问题(Climbing Stairs Problem)
  7. 回文数检测(Palindrome Checking)
  8. 找出数组中的最大值(Finding Maximum Value in an Array)
  9. 分治算法 - 归并排序(Merge Sort)
  10. 搜索二叉搜索树(BST)中的元素(Search in a Binary Search Tree)
  11. 使用递归遍历一个给定的目录下的所有文件
  12. 用递归实现字符串倒转
  13. 求解括号匹配问题(Parentheses Matching Problem)

1. 阶乘(Factorial)

计算一个非负整数 n 的阶乘(n!),即 n × (n-1) × … × 2 × 1。

public int factorial(int n) {
   
    if (n == 0 || n == 1) {
    // 递归的基本情况
        return 1;
    } else {
   
        return n * factorial(n - 1); // 递归调用
    }
}

2. 斐波那契数列(Fibonacci Sequence)

计算第 n 项斐波那契数(F(n) = F(n-1) + F(n-2),其中 F(0) = 0, F(1) = 1)。

public long fibonacci(int n) {
   
    if (n <= 1) {
    // 递归的基本情况
        return n;
    } else {
   
        return fibonacci(n - 1) + fibonacci(n - 2); // 递归调用
    }
}

3. 汉诺塔(Tower of Hanoi)

解决汉诺塔问题,把所有盘子从柱子 A 移动到柱子 C,每次只能移动一个盘子,且任何时候大盘子都不能压在小盘子上面。

public void moveDisk(char from, char to, char aux, int numDisks) {
   
    if (numDisks == 1) {
    // 基础情况
        System.out.println("Move disk 1 from " + from + " to " + to);
    } else {
   
        moveDisk(from, aux, to, numDisks - 1); // 递归地将 n-1 个盘子从 A 移到 B
        System.out.println("Move disk " + numDisks + " from " + from + " to " + to);
        moveDisk(aux, to, from, numDisks - 1); // 递归地将 n-1 个盘子从 B 移到 C
    }
}

4. 遍历树节点(Tree Traversal)

使用递归来实现二叉树的各种遍历方式,例如前序遍历、中序遍历和后序遍历。

class Node {
   
    int data;
    Node left, right;
    
    // 构造函数和其它辅助方法...
}

// 前序遍历
public void preorderTraversal(Node nod

标签:13,遍历,Java,递归,int,详解,numDisks,return,public
From: https://blog.csdn.net/zp8126/article/details/137157805

相关文章

  • java 项目线上拉代码,打包
    pos-admin.sh#!/bin/shecho=================================echo自动化部署脚本启动echo=================================echo停止原来运行中的工程APP_NAME=pos-admin.jar###APP_NAME=test.jar###这个地方的名称就是pom文件中的artifactId,但最好是写......
  • darknet | darknet之nms do_nms_sort详解
    在yolo模型inference执行完成后,会产生很多的冗余结果,此时就需要调用nms对冗余结果进行去重nms函数在darknet框架中是do_nms_sort函数,位于box.c文件中,源码如下:voiddo_nms_sort(detection*dets,inttotal,intclasses,floatthresh){inti,j,k;......
  • Java(static)
    1.在类创建完后,接下来就是创建对象,用同一个类去创建不同对象。如果用这个类去为一整个学校创建学生对象,假如有2000名学生都来自这个学校,那么开辟空间时就要为这个学校重复存储2000次,如果要进行修改,那么也要操作2000次。所以为了解决这个问题去节省内存空间,提高效率,Java提供了......
  • SPI通信协议详解
    文章目录介绍SPI硬件电路移位示意图SPI时序开始与结束时序单元交换字节时序单元模式0(最常用)模式1模式2模式3发送时序指定地址写指定地址读介绍SPISPI由时钟线、主机发送线、主机接收线、从机选择线(一个或多个)组成,拥有高速的速率,使用比较简单,但是需要的线更多,更容......
  • java来了嗷!
    题目一:Java中的重载(Overload)和重写(Override)有何区别?题目二:什么是Java中的异常处理机制?请解释try-catch-finally块的工作原理,并提供一个示例。题目三:Java中的静态方法(StaticMethod)和实例方法(InstanceMethod)有何区别?题目四:Java中的多线程(Multithreading)是如何实现的?请解释一下J......
  • java毕业设计企业人事管理系统(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的快速发展,企业管理逐渐向数字化、智能化方向迈进。人事管理作为企业内部管理的重要组成部分,其信息化水平直接关系到企业的运行效率和管理水......
  • java毕业设计汽车零件厂绩效管理(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在现代企业管理中,绩效管理是连接企业战略目标与员工个人目标的桥梁,它对于提升员工工作积极性、优化团队协作效率以及推动企业持续发展具有重要作用。对于......
  • 【Docker】使用 Docker 主机启动 Nginx 服务器的步骤详解
    文章目录步骤一:安装Docker步骤二:拉取Nginx镜像步骤三:启动Nginx容器步骤四:访问Nginx服务器步骤五:管理Nginx容器总结在本文中,我们将介绍如何使用Docker在主机上启动Nginx服务器。Nginx是一个高性能的HTTP和反向代理服务器,经常用于托管网站和Web应用。通过Docker,我们可......
  • 使用Jep在Java中调用Conda虚拟环境下的Python
    为了解决毕设中需要用到在Java中调用Python的问题,我在网上寻找对应的解决方案。似乎没有太好的解决方案:Jython至今仍是Python2,Py4J似乎也不再活跃更新。所幸我找到了Jep这一神器。正当我雀跃不已,却又发现了一些问题,在两个小时的艰难攻关之下,这些问题逐渐迎刃而解。问题一:无法找到......
  • java反序列化-CC1
    CC1目录CC11、Transformer接口2、Transformer的实现类ConstantTransformerChainedTransformerInvokerTransformer3、寻找调用链TransformedMap(功能理解)LazyMap(调用链分析)1、Transformer接口从Transformer接口开始,对于这个接口是这么介绍的:它被实现为一个将一个对象转换为......