You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中斐波那契数递归与记忆化动态规划函数性能异常问题排查求助

分析你的斐波那契函数性能问题

嘿,很高兴你自己定位到了问题根源!让我再详细拆解一下为什么参数里的&会对性能造成这么大的影响:

错误写法的性能陷阱

你最初的错误版本用了值传递:

long fib(int n, unordered_map<int, long> mp)

每次递归调用这个函数时,都会把整个unordered_map完整复制一份。随着递归深度增加,哈希表的大小不断变大,每次拷贝的开销会急剧上升——这个拷贝的耗时甚至会远远超过递归重复计算子问题的开销,直接导致记忆化版本反而比纯递归更慢。

正确写法的优势

改成引用传递后:

long fib(int n, unordered_map<int, long> &mp)

所有递归调用都会共享同一个unordered_map对象,不会产生任何拷贝开销。此时记忆化的优势才能真正发挥:每个斐波那契数只会被计算一次,后续直接从哈希表中读取结果,时间复杂度从递归的O(2ⁿ)降到了O(n),性能会有质的提升。

额外优化小建议

如果想进一步优化,还可以试试这些思路:

  • 把哈希表换成vector<long>,因为斐波那契的n是连续的整数,数组的随机访问比哈希表更快
  • 将记忆化容器设为函数内的静态变量,避免每次调用都需要手动传入参数

内容的提问来源于stack exchange,提问作者Mridul Bagla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:02:48