关于数学因子的Javascript代码

roh*_*ohn 3 javascript math

我正在读这本关于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);
Run Code Online (Sandbox Code Playgroud)

阅读完代码后,我的理解是"clunk"这个词被打印5次,然后是4次,然后是3次,2次和1次,共计15次,因为我认为每次通过循环都会被添加,而不是相乘.我没有在代码中看到为什么第一个循环要乘以第二个循环,依此类推,直到它达到1?

Mr.*_*ama 5

目前,代码打印clunk120次.该函数clunk()将打印该字clunk的次数等于其第一个参数.因此else,thingamajig计算所提供数字的阶乘的子句:

while (size > 1) {
    facky = facky * size;
    size = size - 1;
}
Run Code Online (Sandbox Code Playgroud)

使用您的输入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
Run Code Online (Sandbox Code Playgroud)

然后它调用clunk(facky)哪个值为120,给我们当前输出.


如果是要打印15倍-使用您提供的逻辑-该else子句thingamajig将看起来像这个:

} else {
    while (size >= 1) {
        clunk(size);
        size = size - 1;
    }
}
Run Code Online (Sandbox Code Playgroud)