【问题标题】:Multi Dimensional Array - Introduction to recursion / Javascript多维数组 - 递归 / Javascript 简介
【发布时间】:2019-06-30 01:39:04
【问题描述】:

我正在尝试学习 javascript 中的递归,但我迷路了。理论上很简单,递归就是函数调用自身的时候。

function factorial(x) {
  if (x < 0) return;
  if (x === 0) return 1;
  return x * factorial(x - 1);
}
factorial(3);

如果我必须遍历一个多维数组。我如何应用递归函数来做到这一点? 我想在不编写多循环的情况下操作这些多维数组。

for (let i = 0; i < points.length; i++) {
    for (let j = 0; j < points.length; j++) {
       for (let k = 0; k < points.length; k++) {
            for (let l = 0; l < points.length; l++) {
                 ...
        }
    }
}

let points = ([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

我认为递归函数可以通过划分第一个数组的迭代并自行调用相同的函数直到子数组结束,以最简单的方式解决这个问题。

你能解释一下怎么做吗?

【问题讨论】:

  • 预期结果是什么?
  • 我想对这些数组进行排序(每个数组的 max 、 min、 max[0] 等)。
  • 您想对points 中的每个内部数组进行排序吗? - 1个for循环应该这样做。为什么需要4个嵌套的for循环?您能分享一下points 示例中的期望输出吗?
  • 好的。明白了。所以你认为递归函数不是操作多维数组的捷径吗?谢谢你的建议。

标签: javascript arrays function recursion


【解决方案1】:

使用 for-in 循环

let points = ([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
for (arr in points){
    for(subarr in arr){
        .........
    }
}

使用 for 循环

let points = ([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
for (let i=0; i<points.length;i++){
    for(let j=0; j<points[i].length;j++){
        .........
    }
}

【讨论】:

    【解决方案2】:

    您可以编写递归来迭代像这样的多维数组。

    var points = [[1, 2], 3, [4, 3], [10, 50], [98, 100]];
    
        function recursion(array, length = 0) {
            if (array.length === length) return 0;
    
            if (Array.isArray(array[length])) {
                recursion(array[length]);
            }
            console.log(array[length]);
    
            recursion(array, length + 1);
        }
        
        recursion(points);

    【讨论】:

      猜你喜欢
      • 2017-12-28
      • 2017-11-28
      • 2019-02-20
      • 2017-02-26
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多