我试图了解记忆化在 C++ 中是如何工作的,所以我查看了 Fib 中使用的记忆化示例。顺序。
std::map<int, int> fibHash;
int memoized_fib (int n)
{
std::map<int, int>::iterator fibIter = fibHash.find(n);
if( fibIter != fibHash.end() ) return *fibIter;
int fib_val;
if( n <=1 ) fib_val = 1;
else fib_val = memoized_fib ( n-1 ) + memoized_fib ( n-2 );
fibHash[ n ] = fib_val;
return fib_val;
}
我对 fibHash[n] 的工作原理有点困惑。它是否只保存每个 fib(#) 的单个值?此外,迭代器遍历索引以在表中查找正确的值并返回?例如 fib(6) = 找到 fib(5) 和 fib(4),已经存储并添加它们?