关于变量污染问题
递归函数,全局变量作用域的污染
刚学了会记忆化搜索时出现的问题
点击查看代码
if(now == 0) {
return volums;
}
if(f[now][volums] != -1) return f[now][volums];
//若ans非开在函数内部,而是全局变量,则进入下一层时,ans会先覆盖上一层ans值,导致污染现象
ans = dfs(now - 1, volums);
if(volums >= v[now]) {
ans = min(ans, dfs(now - 1, volums - v[now]));
}
f[now][volums] = ans;
return ans;
正确写法:
点击查看代码
//写在函数最前面
int ans;
if(now == 0) {
return volums;
}
if(f[now][volums] != -1) return f[now][volums];
ans = dfs(now - 1, volums);
if(volums >= v[now]) {
ans = min(ans, dfs(now - 1, volums - v[now]));
}
f[now][volums] = ans;
return ans;
点击查看代码
if(now == 0) {
return volums;
}
if(f[now][volums] != -1) return f[now][volums];
//随着逻辑进行定义
int ans = dfs(now - 1, volums);
if(volums >= v[now]) {
ans = min(ans, dfs(now - 1, volums - v[now]));
}
f[now][volums] = ans;
return ans;
另一问题是当ans未赋值(需要求值时)
int ans;❌
int ans = 0;✅
浙公网安备 33010602011771号