因此,我刚开始从一本俗气的教科书中教自己JS,要弄清楚这段代码是干什么的,这是一个挑战:
function clunk (times) {
var num = times;
while (num > 0) {
display("clunk");
num = num - 1;
}
}
function thingamajig (size) {
var facky = 1;
clunkCounter = 0;
if (size == 0) {
display("clank");
} else if (size == 1) {
display("thunk");
} else {
while (size > 1) {
facky = facky * size;
size = size - 1;
}
clunk (facky);
}
}
function display(output) {
console.log(output);
clunkCounter = clunkCounter + 1;
}
var clunkCounter = 0;
thingamajig(5);
console.log(clunkCounter);
在我的生活中,我不能遵循这里给出答案的逻辑,那就是"clunk“将在控制台中显示120次。他们说这和阶乘有关(我从来不擅长数学.)但是我找不到显示"clunk“的代码多次重复的步骤。为了不让你知道所有的细节,每次我在纸上浏览它/在我的脑海中我只是得到"clunk“1作为控制台的输出.有人能握住我的手吗?或者告诉我这个析因部分发生在哪里?谢谢!
发布于 2020-02-07 12:39:08
由于aviya.developer已经与您分享了如何调试程序,所以我将与您讨论该算法。我建议您多学习编程基本原理,因为现在您可能已经很好地掌握了循环的工作原理。该算法依靠变量facky
和size
进行阶乘计算,然后将其传递给display
方法。因此,您可以重复几次迭代,并且您应该能够开始理解程序的流程。阶乘部分是thingamajig
方法中的while循环。
facky = facky * size;
facky
初始化为1,我们的size
为5。阶乘公式很容易找到在线。
N!=n×(n−1)×(n−2)− 5 *4*3*2*1= 120
这是我们将使用的函数clunk
调用的值。
clunk
还有一个while
循环,它的终止条件为num > 0
。这意味着我们将继续迭代,而则是正确的。一旦它不再是真的,迭代就会停止。
这意味着,在迭代结束之前,我们将调用值为"clunk“的方法display
120次。
在分析一个算法时,重要的是找出该算法的关键组件/变量/操作,并跟踪它们是如何随时间或通过迭代发生变化的。这将指示何时达到最终目标.
发布于 2020-02-07 12:26:48
我不会和你一起检查密码的。但是我将向您介绍一种方法,在这个方法中,您可以自己检查代码,一步一步地检查它,并更好地理解它。
我指的是调试的使用。通过使用node inspect script.js
运行上述代码,您可以在调试模式下运行脚本。这将允许您在脚本中放置小的停止标志,这将帮助您分析运行过程中发生的事情。
主要停车标志是简单的debugger
。
当您将其放入代码中时,inspect
模式将在此时停止,并允许您从它自己的控制台访问脚本中设置的不同变量和方法。这样,您就可以跟踪不同元素发生了什么,并逐步查看脚本是如何操作的。
用这种方法分析它将帮助您以更深刻的方式理解逻辑,我强烈建议您尝试一下。
下面是以一种体面的方式设置debugger
的脚本:
function clunk (times) {
var num = times;
while (num > 0) {
display("clunk");
num = num - 1;
debugger;
}
}
function thingamajig (size) {
var facky = 1;
clunkCounter = 0;
debugger;
if (size == 0) {
display("clank");
debugger;
} else if (size == 1) {
display("thunk");
debugger;
} else {
while (size > 1) {
facky = facky * size;
size = size - 1;
debugger;
}
clunk (facky);
}
}
function display(output) {
console.log(output);
clunkCounter = clunkCounter + 1;
debugger;
}
var clunkCounter = 0;
thingamajig(5);
console.log(clunkCounter);
试试看!
专业提示:,您可以直接将代码复制到您的铬控制台中,它将启动运行脚本的铬调试器。
https://stackoverflow.com/questions/60120415
复制相似问题