var diceToRoll = [2,2];
var diceRolled = new Array();
function recurse(diceToRoll, diceRolled) {
roll = diceToRoll[0]
diceLeftToRoll = diceToRoll;
diceLeftToRoll.shift();
for(loop=1; loop<(roll+1); loop++) {
result = diceRolled;
result.push(loop);
if(diceLeftToRoll.length == 0) {
console.log(result);
result.pop();
} else {
recurse(diceLeftToRoll, result);
}
}
}
recurse(diceToRoll, diceRolled);
我正在尝试编写一个递归函数来打印任意数量的骰子的可能结果。例如,dd100 ( diceToRoll = [6, 10, 10, 100]
)( diceToRoll = [6, 6, 6, 6, 6]
) 等。在示例中,我使用了最简单的情况(或两个 2 面骰子)。
我预计结果是 [1,1]、[1,2]、[2,1]、[2,2] 但它只记录 [1,1]、[1,2]。这对于任何数量或类型的骰子都是一样的——只有最深层次的递归才能正常工作。
我想我在它的逻辑中遗漏了一些明显的东西/或者误解了 JavaScript 中的变量范围,但我真的很难理解它。
编辑1(使程序目的的解释更清楚)
该程序的目的是列出任意数量骰子上的所有可能值。所以骰子6
意味着值的范围1..6
。同样,一个双面骰子2
, 意味着值的范围1..2
。因此,对于示例 ( ) 中的两个双面骰子,diceToRoll[2,2]
可能的值为 1,1 1,2 2,1 和 2,2 - 这是应该返回的值。