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
。したがって、例 ( ) の 2 つの両面サイコロの場合diceToRoll[2,2]
、可能な値は 1,1 1,2 2,1 および 2,2 であり、これが返されます。