這是我寫的解決問題的程序。檢查是否存在等於數組中最大數的元素總和,如果是,則返回true,否則返回false。遞歸返回語句
var found = "false";
var max;
function ArrayAdditionI(array) {
max = Math.max.apply(null,array);
var p = array.indexOf(max);
array.splice(p,1);
array.sort(function(a, b){return a-b;});
found = findSum(array, 0, 0);
return found;
}
function findSum(array, sum, startIndex){
for(var i = startIndex; i < array.length ; i++){
sum += array[i];
if(sum === max){
found = "true";
break;
}else if(sum > max){
break;
}
if(i+2 < array.length && sum < max){
findSum(array, sum, i+2);
}
}
if(startIndex < array.length && sum !== max){
return findSum(array, 0, startIndex+1);
}
return found;
}
ArrayAdditionI(readline());
我不得不使用全局變量,找到,指示已找到總和的位置。 return語句總是返回undefined。
此外,如果我在下面的if語句中使用return語句,代碼無法正常工作。
if(i+2 < array.length && sum < max){
return findSum(array, sum, i+2);
}
這不是問題的最佳解決方案,但這是我工作的版本。
我的問題是爲什麼我得到未定義,如果我在if語句中使用return語句。此外,我試圖不使用全局和使用返回真如果sum === max,並在最後返回false,它總是返回false或undefined。
- 更新2:代碼,錯誤的結果 -
function ArrayAdditionI(array) {
var max = Math.max.apply(null,array);
//remove max element from array
var p = array.indexOf(max);
array.splice(p,1);
//sort array
array.sort(function(a, b){return a-b;});
//call find sum function
return findSum(array, 0, 0, max);
}
function findSum(array, sum, startIndex){
for(var i = startIndex; i < array.length ; i++){
sum += array[i];
if(sum === max){
return true;
}else if(sum > max){
break;
}
if(i+2 < array.length && sum < max){
**return** findSum(array, sum, i+2, max);
}
}
if(startIndex < array.length && sum !== max){
return findSum(array, 0, startIndex+1, max);
}
return false;
}
// calling the first function
ArrayAdditionI([ 7, 2,90, 31, 50 ]);
程序的啓動是這樣的呼叫:ArrayAdditionI([7,2,90,31,50]); 回報應該是真實的。 另外,ArrayAdditionI([1,2,3,4]);是真的。 但是,ArrayAdditionI([1,2,3,100]);是錯誤的。
** **之間的返回語句,當刪除代碼工作時,否則我得到假或未定義。我不明白這部分!爲什麼取消返回可以解決問題,我認爲每個遞歸調用都必須用return語句繼續。
問題可能是由於多次調用?我是否以不正確的方式使用遞歸?
這是什麼問題?如何不使用全球?如何更好地解決問題? –
注意事項:不要使用字符串布爾值。使用布爾值作爲布爾值。 :-)例如,'found = false'(不是'found =「false」''),'found = true'(不是'found =「true」'),'if(found)'(不是'if(found = =「true」)')... –
我的問題是如果我在if語句中使用return語句,爲什麼會得到undefined?此外,我試圖不使用全局和使用返回真如果sum === max,並在最後返回false,它總是返回false或undefined。 – Maryam