【问题标题】:Combinations in recursive method递归方法中的组合
【发布时间】:2014-03-03 22:19:16
【问题描述】:

我必须打印出 0 和 1 的组合 如果我有 3 位数字,输出应该是这样的:

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");
}

【问题讨论】:

  • 到目前为止你有什么?
  • 你试过的东西!!!
  • 说你尝试了一些东西并不能帮助我们避免重复你应该尝试过的东西。请发布您所做的代码示例。
  • 这是您非常感兴趣的问题之一,以至于您不在乎 OP 尝试了什么。有点上瘾

标签: javascript


【解决方案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))

【讨论】:

    【解决方案2】:

    正如 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 函数现在获得一个回调,每个解决方案都会调用该回调。该演示使用然后记录的值构建一个数组。

    【讨论】:

    • 我不太了解你的代码,我会试试看.. 非常感谢
    • 我添加了一些 cmets 以及函数调用通过哪些步骤来获得解决方案。
    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 2014-08-29
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2021-11-19
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多