private?int?getOptionVarArr_rec(VdsObj?vdsObj,?int?r,
List<Integer>?arrVarQuantset,?List<Integer>?arrVarQuantRes,
int[]?applycache)?{
if?(r?<?2)?{
return?r;
}
List<BddObj>?P_arrAllNodes?=?vdsObj.getP_arrAllNodes();
BddObj?oNode?=?P_arrAllNodes.get(r);
int?iLvl?=?oNode.getLevel();?
if?(applycache[r]?!=?-1)
return?applycache[r];
int?res,?val0,?val1;
if?(arrVarQuantset.get(iLvl)?==?1)
res?=?getOptionVarArr_rec(vdsObj,?oNode.getHigh(),?arrVarQuantset,
arrVarQuantRes,?applycache);
else?if?(arrVarQuantset.get(iLvl)?==?0)?
res?=?getOptionVarArr_rec(vdsObj,?oNode.getLow(),?arrVarQuantset,
arrVarQuantRes,?applycache);
else?{?
val0?=?getOptionVarArr_rec(vdsObj,?oNode.getLow(),?arrVarQuantset,
arrVarQuantRes,?applycache);
val1?=?getOptionVarArr_rec(vdsObj,?oNode.getHigh(),?arrVarQuantset,
arrVarQuantRes,?applycache);
int?iLowLvl?=?P_arrAllNodes.get(oNode.getLow()).getLevel();
int?iHighLvl?=?P_arrAllNodes.get(oNode.getHigh()).getLevel();?
if?(val0?==?1?&&?val1?==?1)?{?
arrVarQuantRes?=?setOneVarOption(iLvl,?-2,?arrVarQuantset,
arrVarQuantRes);
if?(iLvl?+?1?<?iLowLvl)
arrVarQuantRes?=?getOptionVarArr_rec_lvl(iLvl,?iLowLvl,
arrVarQuantset,?arrVarQuantRes);
if?(iLvl?+?1?<?iHighLvl)
arrVarQuantRes?=?getOptionVarArr_rec_lvl(iLvl,?iHighLvl,
arrVarQuantset,?arrVarQuantRes);
res?=?1;
}?else?if?(val0?==?1?&&?val1?==?0)?{?
arrVarQuantRes?=?setOneVarOption(iLvl,?0,?arrVarQuantset,
arrVarQuantRes);
if?(iLvl?+?1?<?iLowLvl)
arrVarQuantRes?=?getOptionVarArr_rec_lvl(iLvl,?iLowLvl,
arrVarQuantset,?arrVarQuantRes);
res?=?1;
}?else?if?(val0?==?0?&&?val1?==?1)?{?
arrVarQuantRes?=?setOneVarOption(iLvl,?1,?arrVarQuantset,
arrVarQuantRes);
if?(iLvl?+?1?<?iHighLvl)
arrVarQuantRes?=?getOptionVarArr_rec_lvl(iLvl,?iHighLvl,
arrVarQuantset,?arrVarQuantRes);
res?=?1;
}?else
res?=?0;?
}
applycache[r]?=?res;
return?res;
}不太明白val0 = getOptionVarArr_rec(vdsObj, oNode.getLow(), arrVarQuantset, arrVarQuantRes, applycache); 下的代碼是如何執行。我的理解是不斷的調用getOptionVarArr_rec方法,遇到r < 2為true時退出,但實際代碼能執行下去val1的值
添加回答
舉報
0/150
提交
取消