我正在阅读这本关于 JavaScript 的书,其中有一个关于计算数学阶乘的练习。好吧,它以一种有趣的方式呈现,其中代码必须打印出一个单词(在本例中为“clunk”),打印出来的时间取决于调用函数时作为参数传递的数字。
在此示例中,数字为 5,因此您总共可以进行 120 种组合 (5x4x3x2x1)。
问题是我很难理解代码中的逻辑。在这里:
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”这个词被打印了 5 次,然后是 4 次,然后是 3、2 和 1,总共 15 次,因为我认为每次循环都被添加了,没有相乘。 我在代码中看不出为什么第一个循环要乘以第二个循环,依此类推直到达到 1?
最佳答案
就目前而言,代码将打印clunk
120 次。函数 clunk()
将打印单词 clunk
的次数等于它的第一个参数。 thingamajig
的 else
子句计算您提供的数字的阶乘:
while (size > 1) {
facky = facky * size;
size = size - 1;
}
使用您输入的 5 展开,将执行为:
facky = 1;
size = 5;
facky = facky * 5; // Now facky = 5
size = 5 - 1; // Now size = 4
facky = facky * 4; // Now facky = 20
size = 4 - 1; // Now size = 3
facky = facky * 3; // Now facky = 60
size = 3 - 1; // Now size = 2
facky = facky * 2; // Now facky = 120
size = 2 - 1; // Now size = 1, we stop our while loop
然后它调用值为 120
的 clunk(facky)
,为我们提供当前输出。
如果要打印 15 次——使用您提供的逻辑——thingamajig
的 else
子句将如下所示:
} else {
while (size >= 1) {
clunk(size);
size = size - 1;
}
}
关于关于数学阶乘的 Javascript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255558/