具体在返回声明中该程序究竟发生了什么?

问题描述 投票:-2回答:1

实际操作在换行中执行

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

我们如何获得第8号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));
    }    
}
java ternary-operator
1个回答
0
投票

返回语句中发生了多种事情。可以像这样重写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;
}

首先,这是使用一种称为递归的技术。该函数调用自身,number参数减1。你可以这样想:

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 * ... * 1

其余的或多或少是编码风格和语法糖。您不需要本地变量并在一行中执行调用和操作:

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

    return num * firstFactorial(num -1);
}

然后在java(<cond> ? <true statement> : <false statement>)中有三元条件运算符,它允许您在一行中表达整个函数体:

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

    return (num == 1) ? 1 : (num * firstFactorial(num -1));
}
© www.soinside.com 2019 - 2024. All rights reserved.