递归使用尽量做好次数限制,避免死循环发生,然后递归的参数传进来,递归重要的参数有助于提高效率。
以下代码
private String getValueCustomFormula(Map<String, CollectionShopAttr> shopAttrMap,
Map<String, InvestmentCalculationChildResp> childRespMap, String dataKey,
Integer size, String turnoverBeforeDiscount) {
CollectionShopAttr shopAttr = shopAttrMap.get(dataKey);
String attrValue = "0";
if (null != shopAttr) {
if (null != shopAttr.getAttrValue()) {
attrValue = shopAttr.getAttrValue();
}
} else {
//投资测算标准的其他字段
InvestmentCalculationChildResp childResp = childRespMap.get(dataKey);
if (null != childResp) {
log.info("childResp: {}", childResp);
//不能自己调自己
if (Objects.equals(dataKey, childResp.getDataValue())) {
return attrValue;
}
//递归出现了10次,将不在进行
++size;
if (size < 10) {
//递归
String paybackScoreResult =
getPaybackScoreResult(shopAttrMap, childRespMap, childResp.getDataValue(), size,
turnoverBeforeDiscount);
log.info("paybackScoreResult: {}", paybackScoreResult);
if (StringUtils.isNotEmpty(paybackScoreResult)) {
attrValue = paybackScoreResult;
}
}
}
}
return attrValue;
}