-1

函数“子集”告诉我“最大”是未定义的。

到底是怎么回事?

function ArrayAdditionI(arr)
{
    arr.sort();
    var largest = arr.pop()
    console.log(largest);
    subset([], arr, largest);
}


function subset(soFar, rest, largest)
{
    var sum = 0;
    if (rest.length === 0)
    {
        for(var i=0; i<soFar.length; i++)
        {
            sum+= soFar[i];            
        }
        console.log("sum = "+ sum + " " + largest);
        if (sum === largest) return true;
    }

    else
    {
        var soFar2 = soFar.slice(0);
        soFar2.push(rest[0]);
        subset(soFar,rest.slice(1));
        subset(soFar2, rest.slice(1));
    }
}


ArrayAdditionI([85,3,88,2])
4

3 回答 3

3
subset(soFar,rest.slice(1));

在这里,您只传递了 2 个参数,但该函数需要 3 个。在 Javascript 中,这不是错误,而是为其余参数赋予 value undefined。您可能希望这些行是:

subset(soFar,rest.slice(1), largest);
subset(soFar2, rest.slice(1), largest);
于 2013-08-29T16:43:32.247 回答
1

您没有largest在递归函数调用中传入第三个参数 , 。

于 2013-08-29T16:41:04.983 回答
1

最后对子集的递归调用不传递第三个参数,因此它被赋予默认值undefined

于 2013-08-29T16:43:25.493 回答