Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么回忆录会给出错误的输出?_C++_Algorithm_Recursion_Memoization - Fatal编程技术网

C++ 为什么回忆录会给出错误的输出?

C++ 为什么回忆录会给出错误的输出?,c++,algorithm,recursion,memoization,C++,Algorithm,Recursion,Memoization,我试图用递归+记忆法解决一个问题。它只是修改了斐波那契,增加了一个start+3步骤,只能执行K次。这是我提出的递归代码: #包括 使用名称空间std; int-helper(int-start、int-N、int-K){ //cout您正在缓存完全基于start的db结果,并完全忽略K。但是helper(0,7,0)和helper(0,7,7)需要根据剩余的K在每个索引处缓存完全不同的数字。因此,您需要缓存索引也基于K 我看到了三种优化方法: 拥有缓存。db[start]将是一个std::v

我试图用递归+记忆法解决一个问题。它只是修改了斐波那契,增加了一个
start+3
步骤,只能执行
K
次。这是我提出的递归代码:

#包括
使用名称空间std;
int-helper(int-start、int-N、int-K){

//cout您正在缓存完全基于
start
db
结果,并完全忽略
K
。但是
helper(0,7,0)
helper(0,7,7)
需要根据剩余的
K
在每个索引处缓存完全不同的数字。因此,您需要缓存索引也基于
K

我看到了三种优化方法:

  • 拥有缓存。
    db[start]
    将是一个
    std::vector
    ,您将在该向量中使用index
    K
    来访问您的项目。这将导致使用更多的内存
  • 放弃
    std::vector
    并使用
    std::unordered_map
    ,其中您的密钥是一对(
    start
    K
    )(可能是
    std::pair
    ,但最好使用具有更好名称的结构)。这应该使用更少的内存,速度损失很少
  • 只有当
    K==0
    时才缓存值。这不会增加缓存大小,但当
    K
    较大时,也会失去很多缓存好处

注意:我很有信心,问题不在于基于上述差异的模,也因为我的输入足够小,模实际上没有任何区别。算法在做什么?它看起来像某种修改过的斐波那契?是的,没错。修改过的斐波那契加上一个附加的
start+3
步骤只能做
K次
次。啊,太好了!我还没意识到。谢谢!:)