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(),则它永远不会完成。