0

3桁の場合、0と1の組み合わせを出力する必要があります。出力は次のようになります。

000 001 010 011 100 101 110 111

2 ^ nの概念が関係していることは知っていますが、多くのアルゴリズムとロジックを試してみましたが、うまくいきませんでした

これは私がこれまでに持っているものです:

void combination( number)    {
    if(number == 0) {
        printf("\n");
        return;
    }
    combination(number - 1);
    printf("0");
    combination(number - 1);
    printf("1");
}
4

2 に答える 2

1

実際には再帰は必要ありません。

var print = function(num, digits) {
   var str = num.toString(2), diff = digits - str.length;
   return diff > 0 ? "0".repeat(diff) + str : str;
}, 
printAll = function(digits) {
   var i = 0, len = Math.pow(2, digits), result = [];
   for(; i < len; i++) {
     result.push(print(i, digits));
   }
   return result;
}

console.log(printAll(3))
于 2013-10-29T14:15:10.703 に答える
1

Yury が述べたように、再帰は必要ありません (実際、問題の再帰的な解決策がある場合は、非再帰的な解決策も存在します!)。しかし、あなたが本当にそれを望むなら、ここにあります:

// length is the length of the expected strings
// partial is a partial solution (a string with at most length characters)
// partial is not a required parameter!
function recursivePrint(length, partial) { 
  partial = partial || ''; // initialize partial to the empty string if it is not provided
  if (partial.length === length) { // exit condition
    console.log(partial); // a solution should be printed
  } else { // recursion incoming
    // the next step from a partial solution is to build 2 more (partial) solutions by appending 0/1 before this one
    recursivePrint(length, '0' + partial);
    recursivePrint(length, '1' + partial);
  }
}

recursivePrint(3); // start recursion

手順は次のとおりです。

''
'0'
'00'
'000' -> print
'100' -> print
'10'
'010' -> print
'110' -> print
'1'
'01'
'001' -> print
'101' -> print
'11'
'011' -> print
'111' -> print

合計: 2^3 ソリューション

デモ: http://jsbin.com/oBiMiHe/1/edit

わずかに改善されたrecursivePrint関数は、ソリューションごとに呼び出されるコールバックを取得するようになりました。デモは、ログに記録される値で配列を作成します。

于 2013-10-29T14:16:56.290 に答える