下面是将数字数组划分为子数组数组的代码
我用过递归,
代码如下,
(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/