递归函数的常量变量值

时间:2015-02-03 17:36:11

标签: java algorithm recursion

static boolean isPrime(int num){
    int consNum = num; //something like having a non-changing value 

    if(consNum < 2){
        return false;
    }

    else if( consNum % Math.round(num--/2) == 0 && num > 2)
        return false;
    }

    else{
        if(num==1)
            return true;
        else
            return isPrime(num);
    }

}

我正在尝试创建一个函数来确定num是否为素数。问题,我想要一个值(consNum)在第一次调用期间保持该值,有没有办法递归执行此操作?

修改

从:

if( (consNum % (int)(num--/2) + 0.5 == 0 ) 

为:

if( (consNum % Math.round(num--/2) == 0 && num > 2) 

2 个答案:

答案 0 :(得分:8)

局部变量是调用特定方法的本地变量;递归方法也不例外。如果您希望将该值传递给调用链,则需要为其创建第二个参数,并将其明确传递:

// Users of your code invoke this method
public static boolean isPrime(int num) {
    return isPrime(num, num);
}
// This overload with two parameters is the actual recursive method
private static boolean isPrime(int num, int original) {
    if(original%(int)((num--/2)+0.5)==0)
        return false;
    }

    else{
        if(num==1)
            return true;
        else
            return isPrime(num, original);
    }
}

答案 1 :(得分:0)

试试这个

    static boolean isFirst=true;
    static int consNum;
    static boolean isPrime(int num){

    if(isFirst){ // This condition will help you to keep consNum with the initial value
        consNum=num;
        isFirst=false;
    }

    if(consNum%(int)((num--/2)+0.5)==0)
        return false;
    }

    else{
        if(num==1)
            return true;
        else
            return isPrime(num);
    }

}