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

本文详细介绍了使用Java实现的13个递归算法问题,包括阶乘、斐波那契数列、汉诺塔、树遍历、数组反转等,并探讨了如何通过递归解决这些常见问题。
摘要由CSDN通过智能技术生成

递归算法题

  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
  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zp8126

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值