OVSolitario-io

导航

关于变量污染问题

递归函数,全局变量作用域的污染

刚学了会记忆化搜索时出现的问题

点击查看代码
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;✅

posted on 2025-05-15 21:14  TBeauty  阅读(231)  评论(0)    收藏  举报