当满足至少1个条件时,在递归函数中返回true

时间:2015-09-30 16:09:49

标签: javascript recursion return

在这里有兴趣的程序员,在对coderbyte做一些挑战时,我遇到了一个我似乎无法解决的小问题。挑战如下;

  • 查找数组中的最大值,并检查其他整数(不包括最大数字)的任何组合是否等于该最大数字。如果找到了组合,则返回true,否则返回false。

我把问题的所有部分都删了,除了返回的部分。您认为这是最容易的部分..但不适合我。这是代码:

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,因为它在函数结束时。另一方面,一旦它符合真实,它不应该返回真实吗?之前遇到过这个问题,是时候找出如何实际看到这个问题了,从而解决了这个问题......

0 个答案:

没有答案