1

我正在解决 y 选择 p 组合。我是 Javascript 的初学者。

我已经产生了阶乘函数的这个定义:它被用来做 x * (x-1) * (x-2) ... * 1。

function factorial(z)
{
    var product = z;
    if (z == 0)
    {
        return 1;
    }
    else
    {
        for (var m = 1; m < z; m++)
        {
            product = m * product;
            return product;
        }
    }
}

然后我有这个函数,它使用阶乘函数。

function placeBoxes()
{
    var ids = 0;
    for (var y = 0; y < (numOfRows-1); y++)
    {
        for (var p = 0; p < (y+1); p++, ids++)
        {
            x = document.createElement('div');
            x.className = "box";
            x.id = ids;
            x.innerHTML = (factorial(y))/((factorial(y-p))*(factorial(p)));
            document.getElementById('holdsBoxes').appendChild(x);
        }
    }
}

它应该选择组合。出于实验目的,numOfRows 实际上介于 5 和 30 之间。 0C0 1C0 1C1 2C0 2C1 2C2 等等……这相当于 1、1、1、1、2、1 等等……

有谁知道我做错了什么?我得到的是 NaN 而不是第二个、第三个、第五个、第八个、第九个和许多其他值的值。

编辑:谢谢大家!问题已经解决了。阶乘函数搞砸了。

4

3 回答 3

1
for (var m = 1; m < z; m++)
{
    product = m * product;
    return product;
}

你回到product你的循环中。你确定吗?你不想回到product你的循环之外吗?

这也是你的原因NaN。如果z是 1 怎么办?然后m < zm < 1,那总是错误的。所以这个循环体永远不会被调用。并且 return 语句永远不会被调用。

所以函数返回undefined。和undefined * 1 === NaN

于 2011-04-14T00:09:12.703 回答
1

改变

    for (var m = 1; m < z; m++)
    {
        product = m * product;
        return product;
    }

    for (var m = 1; m < z; m++)
    {
        product = m * product;
    }
    return product;

你永远不会完成循环

于 2011-04-14T00:09:58.057 回答
1

我认为阶乘函数是不正确的。尝试将其更改为:

function factorial(z)
{
    var product = z;
    if (z == 0)
    {
        return 1;
    }
    else
    {
        for (var m = 1; m < z; m++)
        {
            product = product*(product - m);
        }
        return product;
    }
}
于 2011-04-14T00:13:05.443 回答