Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 因式分解/组合在不应该的情况下产生NaN_Javascript_Combinations_Factorial - Fatal编程技术网

Javascript 因式分解/组合在不应该的情况下产生NaN

Javascript 因式分解/组合在不应该的情况下产生NaN,javascript,combinations,factorial,Javascript,Combinations,Factorial,我在解y选择p组合。我是Javascript的初学者 我给出了阶乘函数的定义: 它被指定做x*(x-1)*(x-2)…*一, 函数阶乘(z) { var乘积=z; 如果(z==0) { 返回1; } 其他的 { 对于(var m=1;m

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

我给出了阶乘函数的定义: 它被指定做x*(x-1)*(x-2)…*一,

函数阶乘(z)
{
var乘积=z;
如果(z==0)
{
返回1;
}
其他的
{
对于(var m=1;m
然后我有一个函数,它使用阶乘函数

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);
        }
    }
}
函数placeBoxes()
{
var-id=0;
对于(变量y=0;y<(numorrows-1);y++)
{
对于(var p=0;p<(y+1);p++,ids++)
{
x=document.createElement('div');
x、 className=“box”;
x、 id=id;
x、 innerHTML=(阶乘(y))/((阶乘(y-p))*(阶乘(p));
document.getElementById('holdsbox').appendChild(x);
}
}
}
它应该选择组合。出于实验目的,numOfRows实际上介于5和30之间。0C0 1C0 1C1 2C0 2C1 2C2等等。。。 这相当于1,1,1,1,2,1等等

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

编辑:谢谢大家!问题解决了。阶乘函数出错。

for(var m=1;mfor (var m = 1; m < z; m++)
{
    product = m * product;
    return product;
}
{ 产品=m*产品; 退货产品; } 您在循环中返回的
产品
。你确定吗?您不想将
产品
返回到循环之外吗

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

因此,函数返回
未定义的
。和
未定义*1==NaN
更改

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

for(var m=1;m

你永远不会完成循环

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

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;
    }
}
函数阶乘(z)
{
var乘积=z;
如果(z==0)
{
返回1;
}
其他的
{
对于(var m=1;m
*=
是无效的JavaScript。此外,您以前使用的m*乘积进行阶乘的方法也可以使用-这只是一种替代方法。正如其他人指出的那样,错误在于您的返回在for循环内。
    for (var m = 1; m < z; m++)
    {
        product = m * product;
    }
    return product;
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;
    }
}