我很难理解下面这些代码行的逻辑。谁能帮忙解释为什么这些代码产生以下结果?
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
答案 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