Java 在不运行程序的情况下计算
我被要求命名变量x的值,下面的算法将在运行后输出该值。我不知道如何在不将其写入实际Java程序的情况下计算它。解决方案应该是1024。我如何在纸上计算 算法:Java 在不运行程序的情况下计算,java,Java,我被要求命名变量x的值,下面的算法将在运行后输出该值。我不知道如何在不将其写入实际Java程序的情况下计算它。解决方案应该是1024。我如何在纸上计算 算法: int n = 4; int x = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { x += x; } } System.out.println(x); int n=4; int x=1; 对于(inti=1;i
int n = 4;
int x = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
x += x;
}
}
System.out.println(x);
int n=4;
int x=1;
对于(inti=1;i而言,x+=x
在每次执行最里面的语句时都加倍x
。
内部循环执行1+2+3+4=4*(4+1)/2=10次。因此,结果必须是2^10=1024
对于常规n
,它应该类似于2^((n+1)*n/2)
有时会调用1+2+…+n=(n+1)*n/2
这一事实,下次当您看到两个嵌套循环,其中内部索引的范围取决于外部索引时,您应该记住这一点。有足够的迭代次数,您可以直接将其写出并保持运行计数:
i = 1
j = 1 to 1
1) x = x + x 2
i = 2
j = 1 to 2
1) x = x + x 4
2) x = x + x 8
i = 3
j = 1 to 3
1) x = x + x 16
2) x = x + x 32
3) x = x + x 64
i = 4
j = 1 to 4
1) x = x + x 128
2) x = x + x 256
3) x = x + x 512
4) x = x + x 1024
我会拿一支铅笔和一张纸,浏览代码,把x的值写下来作为每个循环。你甚至不必做所有的循环来解决这个问题,因为如果你这样做,就会出现一个模式。将来,请展示你在解决你的问题时做了什么,因为这将提高提问者的质量y倍。看看会发生什么。有两个循环,一个从1到4计数,另一个从1到当前外循环变量计数。因此,内部语句执行十次。与内部循环中执行的实际语句相结合(x+=x
)你可以自己计算。@Andrew Tyukin当x=2时,最初的输出是2048,而不是1024,其中x=1。内部循环仍然执行了10次,那么你是如何得到2^10部分的呢?@sticky\u嗯,是的,因为2048=1024*2
?你还期望什么?如果你想把x
当作一个参数,t显式公式是x*2^((n+1)*n/2)
,它线性地依赖于x
的初始值。如果将x
的初始值加倍,则得到的结果是显式公式的两倍。嵌套循环与显式公式(在Scala中):def q(n:Int,x0:Int):Int={var x=x0;对于(我@Andrew Tyukin它是2^10,因为x每次都加倍,或者是因为有两个嵌套循环。我只想知道2从何而来进入这个方程。谢谢。@Andrew Tyukin谢谢。现在你得到我的+1:)