Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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 在这个程序中,特别是在return语句中,到底发生了什么?_Java_Ternary Operator - Fatal编程技术网

Java 在这个程序中,特别是在return语句中,到底发生了什么?

Java 在这个程序中,特别是在return语句中,到底发生了什么?,java,ternary-operator,Java,Ternary Operator,实际操作在线路返回中执行 return (num == 1 ? 1 : num * firstFactorial(num - 1 ) ); 对于num8,我们如何获得40320 public class Factorial { public static int firstFactorial(int num) { return (num == 1 ? 1 : num * firstFactorial(num - 1 ) ); } public

实际操作在线路返回中执行

return (num == 1 ? 1 : num * firstFactorial(num - 1 ) );
对于num8,我们如何获得40320

public class Factorial    {
    public static int firstFactorial(int num)   {
        return (num == 1 ? 1 : num * firstFactorial(num - 1 ) );
    }
    public static void main(String[] args)  {
        System.out.println(firstFactorial(8));
    }    
}

在这个return语句中发生了很多事情。可以像这样重写
firstFactorial
函数:

public static int firstFactorial(int num) {
    if (num == 1) {
       return 1;
    }

    int decreased          = num - 1;
    int recursiveFactorial = firstFactorial(decreased);
    int result             = num * recursiveFactorial;

    return result;
}
1. You call firstFactorial with value of 8
2. firstFactorial(8) calls itself with a value of 7
3. firstFactorial(7) calls itself with a value of 6
...
8. firstFactorial(2) calls itself with a value of 1
9. firstFactorial(1) returns 1 because of the if-statement
10. firstFactorial(2) multiplies 1 with 2 and returns 2
11. firstFactorial(3) multiplies 2 with 3 and returns 6
10. firstFactorial(4) multiplies 6 with 4 and returns 24
...
14. firstFactorial(8) multiplies 5040 with 8 and returns 40320 to you
首先,这是使用一种称为递归的技术。函数正在调用自身,number参数减少1。你可以这样想:

public static int firstFactorial(int num) {
    if (num == 1) {
       return 1;
    }

    int decreased          = num - 1;
    int recursiveFactorial = firstFactorial(decreased);
    int result             = num * recursiveFactorial;

    return result;
}
1. You call firstFactorial with value of 8
2. firstFactorial(8) calls itself with a value of 7
3. firstFactorial(7) calls itself with a value of 6
...
8. firstFactorial(2) calls itself with a value of 1
9. firstFactorial(1) returns 1 because of the if-statement
10. firstFactorial(2) multiplies 1 with 2 and returns 2
11. firstFactorial(3) multiplies 2 with 3 and returns 6
10. firstFactorial(4) multiplies 6 with 4 and returns 24
...
14. firstFactorial(8) multiplies 5040 with 8 and returns 40320 to you
调用自身后,函数将递归调用的返回值乘以自己的参数并返回它。所以它会这样继续下去:

public static int firstFactorial(int num) {
    if (num == 1) {
       return 1;
    }

    int decreased          = num - 1;
    int recursiveFactorial = firstFactorial(decreased);
    int result             = num * recursiveFactorial;

    return result;
}
1. You call firstFactorial with value of 8
2. firstFactorial(8) calls itself with a value of 7
3. firstFactorial(7) calls itself with a value of 6
...
8. firstFactorial(2) calls itself with a value of 1
9. firstFactorial(1) returns 1 because of the if-statement
10. firstFactorial(2) multiplies 1 with 2 and returns 2
11. firstFactorial(3) multiplies 2 with 3 and returns 6
10. firstFactorial(4) multiplies 6 with 4 and returns 24
...
14. firstFactorial(8) multiplies 5040 with 8 and returns 40320 to you
总的来说,这将计算如下值的能力:8*7*6*…*一,

剩下的或多或少是编码风格和语法上的甜点。 您不需要局部变量,只需在一行中执行调用和操作:

public static int firstFactorial(int num) {
    if (num == 1) {
       return 1;
    }

    return num * firstFactorial(num -1);
}
public static int firstFactorial(int num) {
    if (num == 1) {
       return 1;
    }

    return (num == 1) ? 1 : (num * firstFactorial(num -1));
}
然后是java中的三元条件运算符(
?:
),它允许您在一行中表示整个函数体:

public static int firstFactorial(int num) {
    if (num == 1) {
       return 1;
    }

    return num * firstFactorial(num -1);
}
public static int firstFactorial(int num) {
    if (num == 1) {
       return 1;
    }

    return (num == 1) ? 1 : (num * firstFactorial(num -1));
}

阅读有关递归。。。或者只是听老师说。这并不难,只要用笔和纸来理解递归的基础知识,使用调试器并逐步完成即可。1 x 2 x 3 x 4 x 5 x 6 x 7 x 8=猜猜看……40320!使用条件运算符对该代码没有帮助。如果您以前没有见过这样的代码,那么将其扩展到if/else会更加清晰。它似乎需要一些改进。如果使用值0或更小的值调用firstFactorial(),则它永远不会完成。