递归加法

tim*_*den 2 javascript logic

苦苦挣扎着写这段代码.

我正在尝试计算2个物体的最高值.我开始单独的"S"和"P"对象:

var S = [
    { id: '1', value: '##' },
    { id: '2', value: '##' },
    { id: '3', value: '##' },
    { id: 'N', value: '##' }
];

var P = [
    { id: '1', value: '##' },
    { id: '2', value: '##' },
    { id: '3', value: '##' },
    { id: 'N', value: '##' }
];
Run Code Online (Sandbox Code Playgroud)

我创建了第3个对象:

var myobject = {
    'S1' = {
        'P1' = '25',
        'P2' = '32',
        'P3' = '65',
        'PN' = '##'
    },
    'S2' = {
        'P1' = '24',
        'P2' = '31',
        'P3' = '64',
        'PN' = '##'
    },
    'S3' = {
        'P1' = '26',
        'P2' = '33',
        'P3' = '66',
        'PN' = '##'
    },
    'SN' = {
        'P1' = '##',
        'P2' = '##',
        'P3' = '##',
        'PN' = '##'
    }
};
Run Code Online (Sandbox Code Playgroud)

我需要遍历所有值以查看组合产生最高值,例如:

S1.P1 + S2.P1 + S3.P1 = ?
S1.P1 + S2.P1 + S3.P2 = ?
S1.P1 + S2.P1 + S3.P3 = ?
S1.P1 + S2.P2 + S3.P1 = ?
S1.P1 + S2.P2 + S3.P2 = ?
S1.P1 + S2.P2 + S3.P3 = ?
...
Run Code Online (Sandbox Code Playgroud)

我正在寻找的答案,使用上面的示例值,是:

S1.P3 + S2.P3 + S3.P3 = 195
Run Code Online (Sandbox Code Playgroud)

更复杂的是,在某些情况下,"P"值只能在等式中使用一次:

var P = [
    { id: '1', value: '##' },
    { id: '2', value: '##' },
    { id: '3', value: '##', once: true },
    { id: 'N', value: '##' }
];
Run Code Online (Sandbox Code Playgroud)

如果"P3"只能使用一次,那么我正在寻找的答案,使用上面的示例值,是:

S1.P2 + S2.P2 + S3.P3 = 129;
Run Code Online (Sandbox Code Playgroud)

我猜这需要一点点递归......但是我的头疼了.

编辑

我在试图创建计算的循环中迷路了,例如:

foreach "S"
    foreach "P"
        foreach "S"
            foreach "P"
                ....
Run Code Online (Sandbox Code Playgroud)

建议?

Nie*_*sol 6

因为a + b > a + c对于任何a及所有b > c,你就不能得到各的最大值S1,S2,S3...并添加这些在一起吗?

我不确定我完全理解你在做什么,但这应该有助于避免过多的递归.