元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
算法基础
▶
复杂度分析
时间复杂度
空间复杂度
渐进符号
▶
算法思想
分治法
贪心算法
回溯法
概率算法
枚举算法
递推算法
递归算法
动态规划
分支限界法
模拟算法
▶
算法分析
正确性证明
性能优化
算法比较
▶
搜索算法
▶
基本搜索
顺序搜索
二分搜索
插值搜索
▶
图搜索
深度优先搜索
广度优先搜索
启发式搜索
▶
高级搜索
双向搜索
A*算法
模式匹配
▶
排序算法
▶
比较类排序
冒泡排序
快速排序
归并排序
插入排序
选择排序
▶
非比较类排序
计数排序
基数排序
桶排序
▶
高级排序
堆排序
希尔排序
外部排序
拓扑排序
▶
图论算法
▶
图的表示
邻接矩阵
邻接表
边集数组
▶
最短路径
Dijkstra算法
Floyd算法
Bellman-Ford算法
最短路径概述
▶
生成树
Prim算法
Kruskal算法
并查集
最小生成树
▶
图的连通性
强连通分量
割点与桥
双连通分量
欧拉路径
▶
动态规划
▶
基础概念
最优子结构
重叠子问题
状态转移方程
▶
经典问题
背包问题
最长公共子序列
编辑距离
▶
优化技巧
空间优化
状态压缩
区间动态规划
▶
字符串算法
▶
字符串匹配
KMP算法
Boyer-Moore算法
Sunday算法
▶
字符串处理
字典树
后缀数组
字符串哈希
▶
压缩算法
游程编码
Huffman编码
LZ77算法
发布时间:
2025-03-24 22:11
↑
☰
# 递归算法 递归算法(Recursion Algorithm)是一种通过函数调用自身来解决问题的算法思想。它将一个复杂的问题分解为同类的子问题,通过解决子问题来解决原问题。 ## 基本概念 递归算法的特点: 1. 自我调用:函数直接或间接调用自身 2. 终止条件:必须有基本情况来结束递归 3. 问题分解:将问题分解为更小的子问题 4. 结果合并:将子问题的解合并成原问题的解 ## 实现方法 ### 1. 直接递归 ```go // 计算阶乘 func factorial(n int) int { // 基本情况 if n <= 1 { return 1 } // 递归调用 return n * factorial(n-1) } ``` ### 2. 间接递归 ```go // 判断奇偶数 func isEven(n int) bool { if n == 0 { return true } return isOdd(n - 1) } func isOdd(n int) bool { if n == 0 { return false } return isEven(n - 1) } ``` ### 3. 尾递归 ```go // 尾递归实现阶乘 func factorialTail(n int, result int) int { if n <= 1 { return result } return factorialTail(n-1, n*result) } // 包装函数 func factorial(n int) int { return factorialTail(n, 1) } ``` ## 应用场景 1. 数学计算 - 阶乘计算 - 斐波那契数列 - 幂函数计算 2. 数据结构操作 - 树的遍历 - 图的搜索 - 链表操作 3. 分治算法 - 归并排序 - 快速排序 - 二分查找 ## 优缺点 ### 优点 1. 代码简洁 - 实现优雅 - 易于理解 2.