关于数学阶乘的 Javascript 代码

标签 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);

阅读代码后我的理解是“clunk”这个词被打印了 5 次,然后是 4 次,然后是 3、2 和 1,总共 15 次,因为我认为每次循环都被添加了,没有相乘。 我在代码中看不出为什么第一个循环要乘以第二个循环,依此类推直到达到 1?

最佳答案

就目前而言,代码打印clunk 120 次。函数 clunk() 将打印单词 clunk 的次数等于它的第一个参数。 thingamajigelse 子句计算您提供的数字的阶乘:

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

然后它调用值为 120clunk(facky),为我们提供当前输出。


如果要打印 15 次——使用您提供的逻辑——thingamajigelse 子句将如下所示:

} else {
    while (size >= 1) {
        clunk(size);
        size = size - 1;
    }
}

关于关于数学阶乘的 Javascript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255558/

相关文章:

javascript - 是什么导致无法检测到此 Vue 3 应用程序中 html 元素外部的单击事件?

javascript - 一个接一个地打开链接

PHP 给定递增的数字,计算所有可能的组合

javascript - 如何在服务器端发布帖子后使用客户端 JavaScript 显示警报?

javascript - 如何将 HTML 字符串拆分为单词和标签数组

javascript - 将变量从函数传递到 if 语句

c - 找到给定区间 [a,b) - C 中的所有 Carmichael 数

math - 画一条绕地球的路径?

c - C语言%运算符和google计算器mod的区别

java - 使用 Java double (或其他任何东西)存储简单分数