【发布时间】:2022-11-26 22:11:47
【问题描述】:
int dfs(int idx, int mv, char gest){
if (idx > n || mv > k){
return 0;
}
int tmp1 = 0;
if(mv<k){
if(fj[idx]=='H'){
if(gest!='P'){
tmp1=1+dfs(idx+1,mv+1, gest='P');
}
else{
tmp1=1+dfs(idx+1, mv, gest='P');
}
}
else if(fj[idx]=='P'){
if(gest!='S'){
tmp1=1+dfs(idx+1,mv+1, 'S');
}
else{
tmp1=1+dfs(idx+1, mv, 'S');
}
}
else if(fj[idx]=='S'){
if(gest!='H'){
tmp1=1+dfs(idx+1,mv+1,'H');
}
else{
tmp1=1+dfs(idx+1, mv, 'H');
}
}
}
int tmp2 = 0;
if (check(fj[idx], gest)){
tmp2 = 1 + dfs(idx + 1, mv, gest);
}
else{
tmp2 = dfs(idx + 1, mv, gest);
}
return max(tmp1, tmp2);
}
为了完成一道OI题,我写了前面的dfs函数,但是第9行和第12行导致结果不正确。如果我删除参数前面的“gest=”,结果是正确的。为什么?这样的函数传参会给C++带来什么问题呢?
if(mv<k){
if(fj[idx]=='H'){
if(gest!='P'){
tmp1=1+dfs(idx+1,mv+1, 'P');
}
else{
tmp1=1+dfs(idx+1, mv, 'P');
}
}
else if(fj[idx]=='P'){
if(gest!='S'){
tmp1=1+dfs(idx+1,mv+1, 'S');
}
else{
tmp1=1+dfs(idx+1, mv, 'S');
}
}
else if(fj[idx]=='S'){
if(gest!='H'){
tmp1=1+dfs(idx+1,mv+1,'H');
}
else{
tmp1=1+dfs(idx+1, mv, 'H');
}
}
}
这是正确的。
【问题讨论】: