当有 2^n 个条件时,从递归函数 return 的更好方法
Better way to return from recursive function when there are 2^n conditions
假设我有 n = 3
boolean
个变量 -- a
、b
和 c
在 Java
.
这些变量总共可以有 8 (2^n = 2^3)
种组合。
这些条件用于确定recursive
函数中的return
语句如下:
static int recursiveFunc(int x){
boolean a, b, c;
a = getBoolVal(x);
b = getBoolVal(x + 1);
c = getBoolVal(x + 2);
if(a == true && b == true && c == true) //7
return recursiveFunc(x + 1) + recursiveFunc(x + 2) + recursiveFunc(x + 3);
else if(a == true && b == true && c == false) //6
return recursiveFunc(x + 1) + recursiveFunc(x + 2);
else if(a == true && b == false && c == true) //5
return recursiveFunc(x + 1) + recursiveFunc(x + 3);
else if(a == true && b == false && c == false) //4
return recursiveFunc(x + 1);
else if(a == false && b == true && c == true) //3
return recursiveFunc(x + 2) + recursiveFunc(x + 3);
else if(a == false && b == true && c == false) //2
return recursiveFunc(x + 2);
else if(a == false && b == false && c == true) //1
return recursiveFunc(x + 3);
else //0
return 0;
}
static boolean getBoolVal(int x){
if(some condition with respect to x)
return true;
else
return false;
}
如您所见,随着 n
值的增加,条件的数量会变得相当长。
但是,return 语句可以在 n + 2
步(而不是 2^n
)中轻松地 生成,如下所示:
String returnStat = "";
if(a == true)
returnStat += "recursiveFunc(x + 1) + ";
if(b == true)
returnStat += "recursiveFunc(x + 2) + ";
if(c == true)
returnStat += "recursiveFunc(x + 3) + ";
if(returnStat == "")
returnStat = "0";
else
returnStat = returnStat.substring(0, returnStat.length() - 3); //removing extra " + "
有没有什么地方可以return returnStat
作为声明?也许,像 --
return stringToCode(returnStat);
如果没有,如何克服这种情况?
recursiveFunc returns 一个整数,所以只需将整数相加即可:
int result = 0;
if (a)
result += recursiveFunc(x + 1);
if (b)
result += recursiveFunc(x + 2);
if (c)
result += recursiveFunc(x + 3);
return result;
假设我有 n = 3
boolean
个变量 -- a
、b
和 c
在 Java
.
这些变量总共可以有 8 (2^n = 2^3)
种组合。
这些条件用于确定recursive
函数中的return
语句如下:
static int recursiveFunc(int x){
boolean a, b, c;
a = getBoolVal(x);
b = getBoolVal(x + 1);
c = getBoolVal(x + 2);
if(a == true && b == true && c == true) //7
return recursiveFunc(x + 1) + recursiveFunc(x + 2) + recursiveFunc(x + 3);
else if(a == true && b == true && c == false) //6
return recursiveFunc(x + 1) + recursiveFunc(x + 2);
else if(a == true && b == false && c == true) //5
return recursiveFunc(x + 1) + recursiveFunc(x + 3);
else if(a == true && b == false && c == false) //4
return recursiveFunc(x + 1);
else if(a == false && b == true && c == true) //3
return recursiveFunc(x + 2) + recursiveFunc(x + 3);
else if(a == false && b == true && c == false) //2
return recursiveFunc(x + 2);
else if(a == false && b == false && c == true) //1
return recursiveFunc(x + 3);
else //0
return 0;
}
static boolean getBoolVal(int x){
if(some condition with respect to x)
return true;
else
return false;
}
如您所见,随着 n
值的增加,条件的数量会变得相当长。
但是,return 语句可以在 n + 2
步(而不是 2^n
)中轻松地 生成,如下所示:
String returnStat = "";
if(a == true)
returnStat += "recursiveFunc(x + 1) + ";
if(b == true)
returnStat += "recursiveFunc(x + 2) + ";
if(c == true)
returnStat += "recursiveFunc(x + 3) + ";
if(returnStat == "")
returnStat = "0";
else
returnStat = returnStat.substring(0, returnStat.length() - 3); //removing extra " + "
有没有什么地方可以return returnStat
作为声明?也许,像 --
return stringToCode(returnStat);
如果没有,如何克服这种情况?
recursiveFunc returns 一个整数,所以只需将整数相加即可:
int result = 0;
if (a)
result += recursiveFunc(x + 1);
if (b)
result += recursiveFunc(x + 2);
if (c)
result += recursiveFunc(x + 3);
return result;