javascript - 将数组分成数组数组,如何在尾递归中进行?

标签 javascript arrays algorithm recursion tail-recursion

下面是将数字数组划分为子数组数组的代码

我用过递归,

代码如下,

(function(){
    'use strict';

    mainFunction();

    function mainFunction(){
        var inputArray = [12,54,76,6,1,88,7,11,66];
        var arrayOfArrays = [];
        console.log("Input Array is ",inputArray);
        divide(inputArray,arrayOfArrays);
        console.log("Output Array is ",arrayOfArrays);
    } // end of mainFunction

    function divide(numArray,arrayOfArrays){
        var pivot = numArray.length/2,
            leftArray = undefined,
            rightArray = undefined;

        pivot = parseInt(pivot);

        if(pivot >= 1){
            leftArray = numArray.slice(0,pivot);
            rightArray = numArray.slice(pivot,numArray.length);

            if(leftArray.length > 2){
                divide(leftArray,arrayOfArrays);
            }else{
                arrayOfArrays.push(leftArray);  
            }

            if(rightArray.length > 2){
                divide(rightArray,arrayOfArrays);
            }else{
                arrayOfArrays.push(rightArray); 
            }
        }// end of if
    } // end of divide


})();

上面代码的输出是

E:\DataStructuresAndAlgorithms\array>node divideArray01.js
Input Array is  [ 12, 54, 76, 6, 1, 88, 7, 11, 66 ]
Output Array is  [ [ 12, 54 ], [ 76, 6 ], [ 1, 88 ], [ 7 ], [ 11, 66 ] ]

E:\DataStructuresAndAlgorithms\array>

这里我传递变量 'arrayOfArrays' 作为参数, 我不喜欢这样做。

我的问题是如何使用尾递归解决上述问题,这样就不需要传递参数“arrayOfArrays”,函数“divide”只返回一个新数组“arrayOfArrays”

最佳答案

您也可以使用简单的 while 循环可变 block 大小

演示

var arr = [ 12, 54, 76, 6, 1, 88, 7, 11, 66 ];
var chunkSize = 2;
var output = [];
var counter = 0;
while ( counter <= arr.length - 1 )
{
   output.push( arr.slice( counter, counter + chunkSize ) );
   counter += chunkSize;
}
console.log( output );

关于javascript - 将数组分成数组数组,如何在尾递归中进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519943/

相关文章:

javascript - 如何让用户输入两个姓氏并让 Javascript 吐出哪个姓氏按字母顺序排在第一位?

javascript - window.alert() 后无法编辑输入文本字段

javascript - Ajax调用不删除div

java - 如何在 Java 中创建一个简单的 4x3 二维数组?

arrays - excel公式对数组求和

c++ - 计算两个等长字符串之间的不同字符数

Javascript 没有正确解析日期

javascript - 将数组绑定(bind)到 Knockout 样式绑定(bind)

algorithm - 如何将 24 张音乐专辑分成 6 个播放列表,使播放时间/长度尽可能均匀分布?

r - 数据框列的组合和排列