2013-08-29 31 views
-1

函数“subset”告诉我“最大”是未定义的。如何在函数中传递给函数的变量未定义?

这是怎么回事?

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]) 

回答

1

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

+0

或者,而不是'undefined'。 – Marcin

+0

第4行是做什么的? – dwilbank

+0

@dwilbank查看下一个答案。 –

1

的递归调用末子集不通过第三个参数,因此它被赋予的undefined

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

这里的默认值,你只过去了2个参数,但功能预计3.在Javascript中,不是这是一个错误,其余的参数赋值为undefined。你可能想要这些行:

subset(soFar,rest.slice(1), largest); 
subset(soFar2, rest.slice(1), largest);