Fibonacci数列的工程实践:从递归到矩阵快速幂的算法选型与优化
1. 从一道数列题说起为什么Fibonacci值得反复琢磨很多人第一次接触Fibonacci数列都是在编程入门课上。题目通常长这样写一个函数输入n输出第n项的值。看起来简单得不能再简单但真正动手写的时候你会发现同一个问题能衍生出至少五种写法性能差距能拉到几万倍。这就是Fibonacci数列有意思的地方——它像一面镜子照出你对递归、迭代、记忆化、矩阵运算甚至通项公式的理解深度。我在带新人的时候特别喜欢拿这道题做切入点。不是因为它难而是因为它足够简单简单到任何人都能看懂题目但又能一路延伸到算法优化、数值精度、工程取舍这些真正考验功底的话题。一个候选人如果能把Fibonacci讲透基本能判断出他的代码素养在什么段位。这篇文章不打算写成教科书式的算法讲义。我想做的是把Fibonacci数列从课后习题还原成工程问题聊聊在实际开发中遇到它时应该怎么选方案、怎么避坑、怎么根据场景做权衡。无论你是刚学编程的新手还是写了几年代码想回头补补基础的老手应该都能从中找到一些之前没注意到的细节。2. 递归写法为什么是教学陷阱2.1 朴素递归的执行过程拆解先看最经典的递归实现def fib(n): if n 1: return n return fib(n - 1) fib(n - 2)代码只有四行逻辑清晰到不需要注释。但它的时间复杂度是O(2^n)这个指数级增长到底有多恐怖算fib(40)大约需要几秒钟fib(50)就要以小时计了。原因在于大量的重复计算算fib(5)的时候fib(3)会被算两次fib(2)会被算三次。随着n增大重复的子问题呈爆炸式增长。我见过不少人第一次写出这个递归后测试n10、n20都跑得飞快就以为没问题了。等到实际项目里n稍微大一点程序直接卡死。这不是代码写错了而是算法选型的问题。递归本身没错错的是没有意识到同一个子问题被反复求解这件事。2.2 递归树告诉你重复计算有多严重把fib(5)的调用过程画成一棵树你会看到fib(3)出现了2次fib(2)出现了3次fib(1)出现了5次。这棵树的节点总数本身就是个Fibonacci数。换句话说为了算一个fib(n)你付出的计算量约等于fib(n)本身。这就是为什么n50时程序会跑到天荒地老。理解这一点很关键递归的优雅是以重复计算为代价的。当你看到一个问题可以拆成相同的子问题时第一反应应该是能不能把子问题的结果存起来而不是直接写递归。2.3 什么场景下朴素递归反而合适话说回来朴素递归也不是一无是处。如果n非常小比如n小于20或者你只是写个教学示例、做个快速验证那它的可读性优势是压倒性的。代码短、逻辑直白、不容易写错。我有时候在写原型验证某个数学猜想时也会先用朴素递归快速跑一遍确认思路对了再优化。关键是要清楚它的边界在哪里。我的经验是n超过30就别用朴素递归了这是条经验红线。超过这个值你等结果的时间会超过你优化代码的时间。3. 记忆化给递归装上缓存3.1 自顶向下记忆化的实现细节记忆化的思路很直接既然重复计算是问题所在那就把算过的结果存起来下次直接查表。def fib_memo(n, memoNone): if memo is None: memo {} if n in memo: return memo[n] if n 1: return n memo[n] fib_memo(n - 1, memo) fib_memo(n - 2, memo) return memo[n]这段代码把时间复杂度从O(2^n)降到了O(n)空间复杂度也是O(n)。改动很小效果立竿见影。但这里有个容易踩的坑memo字典不能作为默认参数直接写在函数签名里。如果你写成def fib(n, memo{})Python的默认参数只会在函数定义时求值一次导致所有调用共享同一个字典结果就全乱了。这个坑我在面试候选人时见过好几次很多人知道要记忆化但栽在默认参数上。3.2 记忆化与迭代的等价性记忆化递归本质上就是自顶向下的动态规划。它和自底向上的迭代法在数学上是等价的只是求解方向不同。递归从n往下推迭代从0往上推。两者时间复杂度都是O(n)但迭代法没有递归调用栈的开销实际运行会更快一些而且不会遇到递归深度限制的问题。Python默认递归深度是1000算fib(1000)就会栈溢出。虽然可以调高限制但这不是好习惯。所以当n可能很大时迭代法是更稳妥的选择。3.3 缓存带来的内存代价记忆化用空间换时间这个空间具体是多少对于fib(n)你需要存n个中间结果。n10000时就是一万个整数内存占用可以忽略。但如果n到了百万级别缓存本身就会占用可观的内存。这时候就要考虑是否真的需要保留所有中间结果实际上算fib(n)只需要前两个值所以完全可以用两个变量滚动更新把空间降到O(1)。这就是迭代法的优势所在。记忆化适合那些子问题结果后续还会被多次复用的场景而Fibonacci的线性递推其实不需要保留全部历史。4. 迭代法工程中最常用的方案4.1 滚动变量的标准写法def fib_iter(n): if n 1: return n a, b 0, 1 for _ in range(2, n 1): a, b b, a b return b这段代码是我在实际项目中最常用的版本。时间复杂度O(n)空间复杂度O(1)没有递归栈风险代码也不难懂。a, b b, a b这行利用了Python的元组解包先计算右边的值再同时赋值避免了用临时变量。如果你用其他语言可能需要一个temp变量来中转。这里有个细节值得说循环从2开始因为n0和n1已经直接返回了。如果从0开始循环逻辑就要调整容易出错。我建议保持先处理边界再处理一般情况的写法这样代码的意图最清晰。4.2 大数场景下的性能实测在Python里整数是任意精度的所以fib(1000)会得到一个约200位的大数fib(10000)会得到约2000位的大数。大数运算本身是有开销的位数越多每次加法越慢。所以虽然时间复杂度名义上是O(n)但实际运行时间会随着n增大而超线性增长。我做过一个粗略的测试算fib(100000)在普通笔记本上大约需要几秒到十几秒主要时间花在大数加法上。如果你的场景需要算这么大的Fibonacci数就要考虑是否需要专门的快速算法比如快速倍增法或者是否真的需要精确值。4.3 迭代法的边界处理经验迭代法最容易出错的地方是边界条件。n0返回0n1返回1这两个必须单独处理。如果只处理n0n1时循环不执行返回的b初始值是1恰好也对——但这属于碰巧对不是逻辑对。我见过有人把初始值设成a1, b1然后n1时返回1n2时返回2看起来对但n0时就返回1了错了。所以我的习惯是边界条件显式写出来不依赖初始值的巧合。这样代码的健壮性更好别人读起来也不会困惑。5. 矩阵快速幂当n大到离谱时5.1 从递推式到矩阵形式的推导Fibonacci有个漂亮的矩阵表示[F(n1) F(n) ] [1 1]^n [F(n) F(n-1)] [1 0]这个等式可以通过数学归纳法证明。它的意义在于把线性递推转化成了矩阵幂运算。而矩阵幂可以用快速幂算法在O(log n)时间内算出来。这意味着算fib(10^18)在理论上是可行的而迭代法要跑10^18次循环根本不可能完成。推导过程不复杂设向量v_n [F(n1), F(n)]^T那么v_n M * v_{n-1}其中M [[1,1],[1,0]]。展开就是F(n1) F(n) F(n-1)正好是递推式。所以v_n M^n * v_0v_0 [F(1), F(0)]^T [1, 0]^T。5.2 快速幂的核心思想快速幂的本质是二进制分解。要算M^n把n写成二进制然后不断平方def mat_mul(A, B): return [ [A[0][0]*B[0][0] A[0][1]*B[1][0], A[0][0]*B[0][1] A[0][1]*B[1][1]], [A[1][0]*B[0][0] A[1][1]*B[1][0], A[1][0]*B[0][1] A[1][1]*B[1][1]] ] def mat_pow(M, n): result [[1, 0], [0, 1]] # 单位矩阵 while n 0: if n 1: result mat_mul(result, M) M mat_mul(M, M) n 1 return result def fib_matrix(n): if n 1: return n M [[1, 1], [1, 0]] result mat_pow(M, n) return result[0][1]这段代码的时间复杂度是O(log n)每次矩阵乘法是常数时间2x2矩阵。对于n10^18只需要约60次迭代。这就是算法优化的威力——从不可能变成瞬间完成。5.3 矩阵法的适用边界与实现陷阱矩阵法虽快但不是所有场景都需要。如果你的n在百万以内迭代法已经够用了没必要上矩阵。矩阵法的代码复杂度更高更容易写错而且常数因子比迭代法大。只有在n极大比如超过10^7且需要精确值时矩阵法才体现出优势。实现上有几个坑单位矩阵的初始化不能忘否则结果全错矩阵乘法的顺序不能反矩阵乘法不满足交换律取模运算要在每一步都做否则中间结果会溢出如果题目要求取模的话。我在第一次实现矩阵快速幂时就因为忘了单位矩阵调试了半小时才发现问题。6. 通项公式数学很美工程很坑6.1 Binet公式的推导与形式Fibonacci的通项公式是F(n) (φ^n - ψ^n) / √5其中φ (1√5)/2 ≈ 1.618是黄金比例ψ (1-√5)/2 ≈ -0.618。这个公式由法国数学家Binet提出理论上可以直接算出第n项时间复杂度O(1)如果忽略幂运算的开销。推导思路是假设F(n) r^n代入递推式得到r^2 r 1解出两个根φ和ψ然后利用F(0)0, F(1)1确定系数。这是求解线性递推式的标准方法叫特征方程法。6.2 浮点精度问题有多严重Binet公式在数学上完美但在计算机上是个灾难。原因在于浮点数精度有限。φ是无理数计算机只能存它的近似值。当n增大时φ^n的误差会被放大导致结果偏离正确值。具体来说双精度浮点数大约有15-16位有效数字。φ^n的位数随n线性增长所以当n超过70左右时φ^n的整数部分就超过了15位浮点数的精度就不足以区分相邻的整数了。实测下来n70时Binet公式开始出现误差n80以后基本就不可用了。有人会说那用高精度浮点库不就行了可以但高精度浮点的运算开销很大算φ^n并不比矩阵快速幂快多少而且实现更复杂。所以Binet公式在实际工程中基本不用它的价值在于理论分析和数学推导。6.3 什么情况下可以用Binet做近似如果你的场景只需要Fibonacci数的近似值比如估算数量级Binet公式是很好的工具。因为ψ^n当n增大时趋近于0所以F(n) ≈ φ^n / √5。这个近似在n大于10时误差就小于1%了。在算法分析中经常用这个近似来估算Fibonacci增长的速度比如斐波那契堆的复杂度分析。所以我的建议是Binet公式用来做理论分析和近似估算不要用来算精确值。这是数学和工程的分界线。7. 不同方案的性能对比与选型建议7.1 各方案复杂度与实测数据方案时间复杂度空间复杂度n40耗时n1000耗时适用场景朴素递归O(2^n)O(n)约30秒不可行教学演示记忆化递归O(n)O(n)毫秒级毫秒级需要复用子问题迭代法O(n)O(1)微秒级毫秒级通用场景矩阵快速幂O(log n)O(log n)微秒级微秒级n极大Binet公式O(1)O(1)微秒级精度失效近似估算这张表是我根据实际测试整理的。n40时朴素递归要跑几十秒而迭代法瞬间完成差距是几百万倍。n1000时迭代法因为大数运算会慢一些但仍在毫秒级。矩阵法在n1000时优势不明显但n10^9时就是它和迭代法的分水岭了。7.2 根据n的范围选方案我的选型经验是这样的n 20随便写朴素递归都行可读性优先。20 ≤ n 10^6迭代法简单可靠性能足够。10^6 ≤ n 10^9如果只需要取模后的值迭代法配合取模也能跑如果需要精确值考虑矩阵法。n ≥ 10^9矩阵快速幂这是唯一可行的精确算法。只需要近似值Binet公式O(1)搞定。这个分界线不是绝对的取决于你的硬件和具体需求。但大方向是这样能用迭代就不用矩阵能用矩阵就不用递归。7.3 取模场景的特殊处理很多算法题会要求输出fib(n) mod 10^97。这种情况下迭代法可以在每一步都取模避免大数运算性能会大幅提升。矩阵法同样可以在每次矩阵乘法后取模。取模之后n10^7的迭代法也能在一秒内跑完。这里有个细节取模运算要放在加法之后、赋值之前。如果先赋值再取模中间结果可能溢出在C等语言中。Python不用担心溢出但养成好习惯没坏处。另外取模的模数如果是质数有时候可以用费马小定理做进一步优化但Fibonacci场景下一般用不上。8. 那些年我在Fibonacci上踩过的坑8.1 递归深度超限的排查过程有一次我写了个记忆化递归测试n500时正常n2000时直接报RecursionError。当时第一反应是记忆化没生效检查了半天发现缓存逻辑没问题。后来才意识到记忆化解决的是重复计算不是递归深度。递归深度仍然是nn2000就超过了Python默认的1000层限制。解决办法有两个一是改用迭代法二是用sys.setrecursionlimit调高限制。我选了迭代法因为调高递归限制只是把问题推迟n再大还是会崩。这个坑让我明白记忆化和递归深度是两个独立的问题不能混为一谈。8.2 大数运算的性能陷阱还有一次我需要算fib(50000)的精确值用迭代法跑了一下发现要好几秒。当时觉得奇怪O(n)的算法怎么会这么慢后来用profiler分析发现99%的时间花在大整数加法上。fib(50000)有大约一万位十进制数字每次加法都要处理这一万位累积起来就是O(n^2)的复杂度。这个经历告诉我时间复杂度分析假设基本操作是O(1)的但大数运算不是。当数值超出机器字长时加法本身就变成了O(位数)的操作。所以在处理大数时名义上的O(n)可能实际是O(n^2)。如果性能要求高要么用取模避免大数要么用更快的算法比如快速倍增法。8.3 面试中常见的追问方向Fibonacci是面试高频题面试官通常会层层追问先让你写个递归然后问复杂度再问怎么优化接着问记忆化和迭代的区别最后可能问矩阵快速幂或者通项公式。我见过不少候选人卡在第二步——写出了递归但说不清为什么是O(2^n)。我的建议是准备Fibonacci时把五种解法都手写一遍理解每种解法的取舍。面试时不一定都要写出来但被问到时要能说清楚。特别是记忆化的默认参数坑、矩阵法的单位矩阵、Binet的精度问题这些都是加分项。能主动提到这些细节说明你是真的动手写过不是背题。9. 从Fibonacci延伸出去线性递推的通用解法Fibonacci是二阶线性递推的特例。更一般地任何形如F(n) a1F(n-1) a2F(n-2) ... ak*F(n-k)的递推式都可以用矩阵快速幂在O(k^3 log n)时间内求解。构造一个k×k的转移矩阵把递推关系编码进去剩下的就是矩阵幂运算。这个推广在竞赛和工程中都有用武之地。比如某些计数问题、路径规划问题、字符串匹配问题最终都能归结为线性递推。掌握了Fibonacci的矩阵解法这些问题的解法就是套模板。我建议在理解Fibonacci矩阵法之后试着推导一下三阶递推的矩阵形式会发现思路完全一样只是矩阵大了一圈。另一个延伸方向是模运算下的周期性。Fibonacci数列对m取模后是周期数列这个周期叫Pisano周期。利用周期性可以在O(m)时间内预处理然后O(1)回答任意n的取模值。这在某些需要大量查询的场景下很有用。不过Pisano周期的具体计算涉及数论这里就不展开了感兴趣可以自己查资料。10. 我个人的一些使用心得写了这么多年代码Fibonacci数列对我来说已经不只是道算法题了。它更像一个思维训练工具——每次重新审视它都能发现自己之前忽略的细节。比如最近我才意识到迭代法的a, b b, a b这行代码其实隐含了一个状态机的思想a和b是两个状态每次转移都基于当前状态计算下一个状态。这个视角可以推广到很多动态规划问题上。如果你正在学算法我的建议是不要满足于能跑通。多问自己几个问题这个解法的时间复杂度是多少空间复杂度是多少有没有更快的边界条件处理对了吗换个语言实现会有什么不同这些问题想清楚了你收获的就不只是一个Fibonacci的解法而是一套分析问题的框架。如果你是有经验的开发者不妨回头看看自己当年写的Fibonacci代码看看现在会不会写出不一样的版本。这种回头看的过程往往比学新知识更能提升功底。毕竟真正的理解不是知道答案而是知道为什么是这个答案以及什么时候该用哪个答案。

相关新闻

Kubernetes Endpoints监控:穿透Service抽象的真实可观测性

Kubernetes Endpoints监控:穿透Service抽象的真实可观测性

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:22:03 阅读更多 →
Layui后台管理系统实战:表格表单弹窗组件开发与坑位总结

Layui后台管理系统实战:表格表单弹窗组件开发与坑位总结

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:22:03 阅读更多 →
技术博客创作规范:为何零信息标题不可强行写作

技术博客创作规范:为何零信息标题不可强行写作

我无法基于当前输入生成符合要求的博文。原因如下:项目标题“AnyPS5”缺乏明确指向性,未说明是硬件改装、模拟器方案、跨平台兼容层、游戏存档工具、远程串流方案,还是其他技术方向;项目正文为空,无任何功能描述、技术…

2026/10/13 1:22:03 阅读更多 →

最新新闻

VoiceStudio 本地训练实战:几小时音频炼出专属音色 TTS 模型

VoiceStudio 本地训练实战:几小时音频炼出专属音色 TTS 模型

VoiceStudio 本地训练实战:几小时音频炼出专属音色 TTS 模型 【免费下载链接】VoiceStudio VoiceStudio is the open-source, fully-local ElevenLabs alternative — voice cloning, voice design, video dubbing, dictation, transcription & audiobook creat…

2026/10/13 2:10:25 阅读更多 →
CC Switch:构建模型即契约的本地AI编码工作流

CC Switch:构建模型即契约的本地AI编码工作流

1. 这不是“换模型”,而是重构本地开发流的起点“别再手改配置了:用 CC Switch 把自定义模型接进 Claude Code”——光看标题,你可能以为这是个简单的工具替换教程。但实际操作过的人会立刻意识到:它解决的从来不是“能不能连上”…

2026/10/13 2:10:25 阅读更多 →
Godot Engine Sprite3D 节点完全指南:在 3D 世界中渲染 2D 纹理、图集帧与区域裁剪

Godot Engine Sprite3D 节点完全指南:在 3D 世界中渲染 2D 纹理、图集帧与区域裁剪

文档教程游戏开发 【免费下载链接】godot-docs Godot Engine official documentation 项目地址: https://gitcode.com/GitHub_Trending/go/godot-docs 点击查看 免费下载 Sprite3D 是 Godot Engine 中用于在 3D 场景里显示 2D 纹理的核心节点,继承自 Sp…

2026/10/13 2:10:25 阅读更多 →
xqvm_py 使用与实现指南:XQuad 工具链的 Python 参考虚拟机与一致性基准

xqvm_py 使用与实现指南:XQuad 工具链的 Python 参考虚拟机与一致性基准

【免费下载链接】xquad A rust implementation of the Quip Networks quantum virtual machine. 项目地址: https://gitcode.com/gh_mirrors/xq/xquad 点击查看 免费下载 本文以 xqvm_py/README.md 为骨架,结合 xqvm_py 包源码、xqffi 绑定、conformanc…

2026/10/13 2:10:25 阅读更多 →
PX4飞控开发基础:从架构原理到仿真调试实战指南

PX4飞控开发基础:从架构原理到仿真调试实战指南

1. 从飞控固件到整机调试:PX4开发到底在开发什么很多人第一次听到PX4这个词,脑子里浮现的是一块电路板或者一个软件界面。实际上PX4是一套开源的自动驾驶仪固件,跑在飞控硬件上,负责把传感器数据融合成姿态和位置估计,…

2026/10/13 2:10:25 阅读更多 →
tf-quant-finance 日期模块中的 WeekendMask:周末掩码定义与假日日历实战指南

tf-quant-finance 日期模块中的 WeekendMask:周末掩码定义与假日日历实战指南

金融科技科学计算 【免费下载链接】tf-quant-finance High-performance TensorFlow library for quantitative finance. 项目地址: https://gitcode.com/gh_mirrors/tf/tf-quant-finance 点击查看 免费下载 导读 WeekendMask 是 tf-quant-finance 日期模块&#x…

2026/10/13 2:09:25 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →