连续两句相同的递归方法是如何执行的


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的值

car
浏览 1280回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java