当有 2^n 个条件时,从递归函数 return 的更好方法

Better way to return from recursive function when there are 2^n conditions

假设我有 n = 3 boolean 个变量 -- abcJava.

这些变量总共可以有 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;