Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 负整数的迭代_Java_Function_Loops_Foreach_Negative Integer - Fatal编程技术网

Java 负整数的迭代

Java 负整数的迭代,java,function,loops,foreach,negative-integer,Java,Function,Loops,Foreach,Negative Integer,我编写了一个迭代函数来生成表达式的结果: F(n) = 3*F(n-1)+ F(n-2) + n 公共整数计算(整数n){ 如果(n==0){ 返回4; } 如果(n==1){ 返回2; } 否则{ int f=0; int fOne=4; int-fTwo=2; 对于(int i=2;i如果您的方法不适用于负值,那么您可以责怪调用方传递负值。当n为负值时,只需抛出一个InvalidParameterException public int calculate(int n){ if

我编写了一个迭代函数来生成表达式的结果:

F(n) = 3*F(n-1)+ F(n-2) + n

公共整数计算(整数n){
如果(n==0){
返回4;
}
如果(n==1){
返回2;
}
否则{
int f=0;
int fOne=4;
int-fTwo=2;

对于(int i=2;i如果您的方法不适用于负值,那么您可以责怪调用方传递负值。当n为负值时,只需抛出一个
InvalidParameterException

public int calculate(int n){
    if (n < 0){
        throw new InvalidParameterException("Negative parameter");
    }
    //... proceed as usual
}
公共整数计算(整数n){
if(n<0){
抛出新的InvalidParameterException(“负参数”);
}
//…照常进行
}

这是一个简单的数学问题:

F(n) = 3*F(n-1)+F(n-2)+n
因此

替换
n=k+2
并获得:

F(k) = F(k+2)-3*F(k+1)-k-2
因此,您可以计算包含两个后续数字的函数。以下是更新的代码:

public int calculate(int n) {
    if (n == 0) {
        return 4;
    }
    if (n == 1) {
        return 2;
    } else if (n < 0) {
        int f = 0;
        int fOne = 4;
        int fTwo = 2;
        for (int i = -1; i >= n; i--) {
            f = fTwo - 3 * fOne - i - 2;
            fTwo = fOne;
            fOne = f;
        }
        return f;
    } else {
        int f = 0;
        int fOne = 4;
        int fTwo = 2;
        for (int i = 2; i <= n; i++) {
            f = 3 * fOne + fTwo + i;
            fTwo = fOne;
            fOne = f;
        }
        return f;
    }
}
您可以轻松地检查您的原始条件是否也适用于负数

F(0) = 3*F(-1)+F(-2)+0 = 3*(-11)+37+0 = 4

尝试使用负数的简单例子,不是吗?输出应该是当前输出的负数,不是吗?
public int calculate(int n) {
    if (n == 0) {
        return 4;
    }
    if (n == 1) {
        return 2;
    } else if (n < 0) {
        int f = 0;
        int fOne = 4;
        int fTwo = 2;
        for (int i = -1; i >= n; i--) {
            f = fTwo - 3 * fOne - i - 2;
            fTwo = fOne;
            fOne = f;
        }
        return f;
    } else {
        int f = 0;
        int fOne = 4;
        int fTwo = 2;
        for (int i = 2; i <= n; i++) {
            f = 3 * fOne + fTwo + i;
            fTwo = fOne;
            fOne = f;
        }
        return f;
    }
}
-10: 520776
-9: -157675
-8: 47743
-7: -14453
-6: 4378
-5: -1324
-4: 402
-3: -121
-2: 37
-1: -11
0: 4
1: 2
2: 16
3: 55
4: 185
5: 615
6: 2036
7: 6730
8: 22234
9: 73441
F(0) = 3*F(-1)+F(-2)+0 = 3*(-11)+37+0 = 4