2013-08-29 59 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); 
相關問題