【发布时间】:2018-09-28 04:56:54
【问题描述】:
我正在尝试使用 map 优化递归问题来处理运行时错误。但是,使用 memoization 方法和实现 map 仍然不能完全解决问题。通过使用朴素的递归方式,直到totalNum = 36才会出现分段错误错误。优化后,当totalNum变得非常大时,仍然会出现分段错误错误,例如99999。 即使 totalNum 大于 99999,有没有办法解决这个运行时问题?以下是我的头文件代码:
using namespace std;
static map<pair<int, int>, double> map;
double val(int r, int b){
if (0 == r)
return ((double) b);
if (0 == b)
return (0);
if (map.find(make_pair(r, b)) != map.end()){
return (double)map[make_pair(r, b)];
} else{
double num1 = ((double) r/(r+b)) * value(r-1, b);
double num2 = ((double) b/(r+b)) * value(r, b-1);
double value = max((num1 + num2), (double) (b - r));
map[make_pair(r, b)] = value;
return value;
}
}
#endif
在main()中用于打印消息:cout
【问题讨论】:
-
使用调试器单步执行代码并确定
map是否是实际的罪魁祸首。 -
旁白:你已经
using namespace std;'ed,然后在下一行中引入了命名冲突map。 请不要做任何一个。可以把地图移到vals,定义static std::map<std::pair<int, int>, double> memo;
标签: c++ dictionary recursion data-structures memoization