【问题标题】:What is the logical explanation behind this lines of code that included "for" loop?这行包含“for”循环的代码背后的逻辑解释是什么?
【发布时间】:2019-03-23 03:57:03
【问题描述】:

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

  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

【问题讨论】:

  • 这是一个阶乘级数,解释如下: 1! = 1 2! = 2 * 1 = 2 3! = 3*2*1 = 6 4! = 4*3*2*1 = 24 5! = 5*4*3*2*1 = 120

标签: java loops for-loop math logic


【解决方案1】:

在 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)为例。我将扩展神秘()中的 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() 是阶乘函数。神秘(5)= 5!,神秘(4)= 4!,等等。

【讨论】:

    【解决方案2】:

    让我们首先了解神秘() 的作用。 比如说 int k = 4,

    y = k // y becomes 4
    

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

    这就是为什么当你的 main 方法中 n 为 4 时,你得到的输出为 24。

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

    1 2 6 24 120

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多