在这里有兴趣的程序员,在对coderbyte做一些挑战时,我遇到了一个我似乎无法解决的小问题。挑战如下;
我把问题的所有部分都删了,除了返回的部分。您认为这是最容易的部分..但不适合我。这是代码:
function ArrayAdditionI(arr, largest, partial) {
var n, sumPart, remaining, largestI, result;
// declace the next partial array, or start with an empty one
partial = partial || [];
// find the largest value from the original array,
// use the existing one if already declared
largest = largest || arr.reduce(function(max, cur) {
if(cur>max) return cur;
else return max;
});
// sum up possible combinations of the partial array
sumPart = partial.reduce(function (a, b) {return a + b;}, 0);
// sumPart equal to largest int? return true
if(sumPart === largest) {
console.log("%s=%s", partial.join("+"), largest);
return true;
}
// sumPart more than desired number? Stop
if(sumPart > largest) {
console.log("%s>%s", partial.join("+"), largest)
return;
}
for(var i=0;i<arr.length;i++) {
n = arr[i];
if(n != largest) {
remaining = arr.slice(i + 1);
ArrayAdditionI(remaining, largest, partial.concat([n]));
};
};
return false;
};
// keep this function call here
// to see how to enter arguments in JavaScript scroll down
ArrayAdditionI([4,6,23,10,1,3]);
它根据第一个-if语句记录正确答案,但是,无论我做什么,它都不会记录“ true ”。一方面,我可以看到每次返回false,因为它在函数结束时。另一方面,一旦它符合真实,它不应该返回真实吗?之前遇到过这个问题,是时候找出如何实际看到这个问题了,从而解决了这个问题......