我正在解决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而不是第二,第三,第五,第八,第九和许多其他值的值。
编辑:谢谢大家!问题已经解决了。阶乘功能搞砸了。
答案 0 :(得分:1)
for (var m = 1; m < z; m++)
{
product = m * product;
return product;
}
您在循环中返回product
。你确定吗?你不想在你的循环之外返回product
吗?
这也是NaN
的原因。如果z
为1,该怎么办?那么m < z
是m < 1
,那总是假的。所以循环体永远不会被调用。并且永远不会调用return语句。
因此该函数返回undefined
。并undefined * 1 === NaN
答案 1 :(得分: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;
你永远不会完成循环
答案 2 :(得分: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;
}
}