在包含“ for”循环的这几行代码背后的逻辑解释是什么?

时间:2019-03-23 03:57:04

标签: java loops for-loop math logic

我很难理解下面这些代码行的逻辑。谁能帮忙解释为什么这些代码产生以下结果?

  public class Test {
public static void main(String[] args) {
   int n;
   for(n = 1; n <= 5; n++)
       System.out.println(mystery(n));
}
public static int mystery(int k){
     int x,y;
    y = k;
    for(x=1; x<= (k -1); x++)
        y = y * (k-x);
    return y;
}

这些是结果:

1 2 6 24 120

2 个答案:

答案 0 :(得分:0)

在main中,您声明了一个称为n的新int。在for循环中,将n初始化为1,然后运行for循环,直到n>5。如果我们扩展for循环,则您进行的调用是:

System.out.println(mystery(1));
System.out.println(mystery(2));
System.out.println(mystery(3));
System.out.println(mystery(4));
System.out.println(mystery(5));

在mystery()中,您声明两个整数:x和y。将y初始化为k(从方法调用中收到的参数)。 在for循环中,将x初始化为1,然后运行for循环,直到x>(k-1)。这使循环运行k-1次。然后,每次运行循环时,y乘以(k-x)。当x>(k-1)时,您返回y。

让我们以奥秘(5)为例。我将在mystery()中扩展for循环,以便更好地对其进行可视化处理。

int x,y;
y = 5;

y = y * (5 - 1); //y*4
y = y * (5 - 2); //y*3
y = y * (5 - 3); //y*2
y = y * (5 - 4); //y*1

return y;

从数学上讲,奥秘(5)= 5 * 4 * 3 * 2 * 1 = 120 因此,mystery()是阶乘函数。 mystery(5)= 5!,mystery(4)= 4 !,依此类推。

答案 1 :(得分:0)

首先让我们了解一下mystery()的作用。 假设int k = 4,

y = k // y becomes 4

在for循环中,我们将x = 1迭代到x =(k-1)即3 最终在for循环中,y变为4 * 3 * 2 * 1 = 24

这就是为什么在主方法中n为4时,输出为24的原因。

简而言之,神秘函数计算n = 1到n = 5的阶乘 因此输出是1到5的阶乘。

1 2 6 24 120