Javascript给定一个数字我想要所有可能的组合和元素数组

Javascript给定一个数字我想要所有可能的组合和元素数组,javascript,algorithm,search,combinations,Javascript,Algorithm,Search,Combinations,在javascript代码中,我将使用元素的所有可能组合,它们的总和给出我想要的数字: 例如: 或 这是我的代码,但我只有第一个组合!我不知道为什么当我返回递归函数时,也会返回主函数,并且它不会继续与另一个组合。 你能帮帮我吗?我明白这一点 $(文档).ready(函数(){ var numero=3; var数组=[2,1,2,1]; var tmpArray=[]; var finalArray=[]; $(“#按钮”)。单击(函数(){ 组合表卡(阵列、数字、tmpArray); 控制台日

在javascript代码中,我将使用元素的所有可能组合,它们的总和给出我想要的数字: 例如:

这是我的代码,但我只有第一个组合!我不知道为什么当我返回递归函数时,也会返回主函数,并且它不会继续与另一个组合。 你能帮帮我吗?我明白这一点

$(文档).ready(函数(){
var numero=3;
var数组=[2,1,2,1];
var tmpArray=[];
var finalArray=[];
$(“#按钮”)。单击(函数(){
组合表卡(阵列、数字、tmpArray);
控制台日志(finalArray);
})
功能组合表卡(卡片阵列、数字、部分阵列){
var n;
var s=SUMRARY(部分阵列);
如果(s==数字){
最后推(部分排列);
}
如果(s>=编号){
返回;
}

对于(i=0;i在这个函数中,问题是您没有将i声明为局部变量,因此它将成为全局变量。函数组合TableCard和sumArray使用相同的变量i。声明变量i;您将得到所需的结果。

给您。仍然需要在显示上做一些工作。

   <!DOCTYPE html>

    <head>
      <meta charset="utf-8">
       <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
      <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
      <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">

      <style>
      body {background-color:lightgray}
      </style>
    </head>
    <body>
      <div id="container"></div>
      <button type="button" id="button">Click Me To Calculate combination!</button>
      <script>
      $(document).ready(function() {

        var target = 15;
        var array = [3,9,8,4,5,7,10];
        var tmpArray = [];
        var finalArray = [];

        $("#button").click(function() {
          sum_up_recursive(array, target, tmpArray);
          console.log(finalArray.toString());
          var finalText = '';
          finalArray.forEach(function(entry) {
            finalText = finalText + entry + '</br>';
          });
          $("#container").html(finalText);
        })

        function sum_up_recursive(numbers, number, partialArray) {

          var s=0;
          partialArray.forEach(function(entry) {
            s=s+entry;
          });
          if (s == target) {
            //finalArray.push(partialArray);
            var res = partialArray.join();  
            res=res.replace(/,/g , '+');
            res= res+"="+s;
             console.log(res);
             finalArray.push(partialArray);
            //$("#container").text(res);
          }
          if (s >= target) {
            return;
          }
          for (var i=0; i<numbers.length; i++) {
            n = numbers[i];
            //var remaining = copyArray(cardArray, i+1, cardArray.length-1);
            var remaining = [];
            var remaining = numbers.slice(i+1);
            var partical_arr = partialArray.slice();       
            partical_arr.push(n);
            sum_up_recursive(remaining, target, partical_arr);
          }
        }

      });

      </script>

    </body>
    </html>

正文{背景色:浅灰色}
点击我计算组合!
$(文档).ready(函数(){
var目标=15;
var数组=[3,9,8,4,5,7,10];
var tmpArray=[];
var finalArray=[];
$(“#按钮”)。单击(函数(){
求和递归(数组、目标、tmpArray);
log(finalArray.toString());
var finalText=“”;
finalArray.forEach(函数(条目){
finalText=finalText+entry+'
'; }); $(“#容器”).html(finalText); }) 函数求和递归(数字、数字、部分数组){ var s=0; partialArray.forEach(函数(条目){ s=s+入口; }); 如果(s==目标){ //最后推(部分排列); var res=partialArray.join(); res=res.replace(/,/g,“+”); res=res+“=”+s; 控制台日志(res); 最后推(部分排列); //$(“#容器”).text(res); } 如果(s>=目标){ 返回; }
对于(var i=0;iOK),我更改了它,但现在我得到了四个空数组!我在递归调用后添加partialArray.pop()
array = [5, 5, 4, 4, 2] 
number = 10 
finalArray = [[5, 5], [4, 4, 2]]
 $(document).ready(function() {

    var numero = 3;
    var array = [2, 1, 2, 1];
    var tmpArray = [];
    var finalArray = [];

    $("#button").click(function() {
        combinationTableCard(array, numero, tmpArray);
        console.log(finalArray);
    })

    function combinationTableCard(cardArray, number, partialArray) {

            var n;
            var s = sumArray(partialArray);
            if (s == number) {
                finalArray.push(partialArray);
            }
            if (s >= number) {
                return;
            }
            for (i=0; i<cardArray.length; i++) {
                    n = cardArray[i];
                    var remaining = copyArray(cardArray, i+1, cardArray.length-1);

                    partialArray.push(n);
                    combinationTableCard(remaining, number, partialArray);
            }
        }

    function sumArray(v) {
            var total = 0;      
            if (v.length == 0) {
                return total;
            } else {
                for (i=0; i<v.length; i++) {
                    total += v[i];
                }
                return total;
            }
        }

        function copyArray(v, i, j) {
            var newV = new Array();
            var k = 0;
            for(i; i <= j; i++) {
                newV[k] = v[i];
                k++;
            }
            return newV;
        }

    })
   <!DOCTYPE html>

    <head>
      <meta charset="utf-8">
       <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
      <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
      <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">

      <style>
      body {background-color:lightgray}
      </style>
    </head>
    <body>
      <div id="container"></div>
      <button type="button" id="button">Click Me To Calculate combination!</button>
      <script>
      $(document).ready(function() {

        var target = 15;
        var array = [3,9,8,4,5,7,10];
        var tmpArray = [];
        var finalArray = [];

        $("#button").click(function() {
          sum_up_recursive(array, target, tmpArray);
          console.log(finalArray.toString());
          var finalText = '';
          finalArray.forEach(function(entry) {
            finalText = finalText + entry + '</br>';
          });
          $("#container").html(finalText);
        })

        function sum_up_recursive(numbers, number, partialArray) {

          var s=0;
          partialArray.forEach(function(entry) {
            s=s+entry;
          });
          if (s == target) {
            //finalArray.push(partialArray);
            var res = partialArray.join();  
            res=res.replace(/,/g , '+');
            res= res+"="+s;
             console.log(res);
             finalArray.push(partialArray);
            //$("#container").text(res);
          }
          if (s >= target) {
            return;
          }
          for (var i=0; i<numbers.length; i++) {
            n = numbers[i];
            //var remaining = copyArray(cardArray, i+1, cardArray.length-1);
            var remaining = [];
            var remaining = numbers.slice(i+1);
            var partical_arr = partialArray.slice();       
            partical_arr.push(n);
            sum_up_recursive(remaining, target, partical_arr);
          }
        }

      });

      </script>

    </body>
    </html>