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 の間です。

私が間違ったことを誰か知っていますか?2 番目、3 番目、5 番目、8 番目、9 番目、および他の多くの値の値の代わりに NaN を取得しています。

編集:みんなありがとう!問題は解決された。階乗関数が台無しになりました。

4

3 に答える 3

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

productループ内に戻ります。あなたはこれについて確信を持っていますか?ループの外に戻りたくないですproductか?

これもあなたの原因ですNaN。1 の場合zは?それ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 に答える