【发布时间】:2023-03-25 13:17:01
【问题描述】:
这是一种带有缓存的简单递归方法,因此不会一遍又一遍地重新计算数字。我肯定看到它工作,但现在它坏了,打印垃圾。我已经尝试恢复到工作版本,但找不到任何可能破坏它的差异。
为什么它停止工作了?
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int Fibonacci_vector(int n) {
static vector<int> cache(2, 1);
cache.reserve(n);
if (cache[n] == 0) {
cache[n] = Fibonacci_vector(n-1) + Fibonacci_vector(n-2);
}
return cache[n];
}
int main() {
cout << Fibonacci_vector(4);
}
更新天啊,我太笨了,它只是伤害。我已将if (n > cache.size()) { cache.resize(n); } 更改为cache.reserve(n);,当然它破坏了一切!对不起,伙计们,我的愚蠢。
【问题讨论】:
-
这不会编译。您正在尝试访问您无权访问的内存。
-
cache[n]从 1 开始什么时候会是 0? -
@TarikNeaj, It compiles.
-
出于某种原因不适合我。使用 Visual Studio 2013。
-
@OP,你可能想要
std::unordered_map。
标签: c++ caching recursion vector fibonacci