javascript - 在javascript中创建N个嵌套循环的策略

标签 javascript loops recursion

假设我有这个模式:

for(let i =0; i < 3; i++){
  for(let j =0; j < 3; j++){
    for(let k =0; k < 3; k++){
      console.log(i,j,k)
    }
  }
}

好处是我可以访问最内层循环中的所有迭代变量。 ijk,缺点是它被硬编码为 3 层嵌套循环。如果我想要第四个,我需要手动添加该代码。

我试图使用递归来概括代码,我可以将嵌套循环的数量设置为任意变量。这是我正在尝试的:

const maxNestedLoops = 3;
const iterations = 3;

const indexes = [];

function looper(loopNumber){  
  for(indexes[loopNumber] = 0; indexes[loopNumber] < iterations; indexes[loopNumber]++){

     if(loopNumber < maxNestedLoops){
      looper(loopNumber + 1);
     }
      console.log(indexes);

  }
}

looper(0);

第一个结果在控制台中如下:

0, 0, 0
0, 0, 1
0, 0, 2
0, 1, 0
0, 1, 1
0, 1, 2
0, 2, 0
0, 2, 1
0, 2, 2
...and so on

但是,与我的递归函数示例不同:

[0, 0, 0, 0]
[0, 0, 0, 1]
[0, 0, 0, 2]
[0, 0, 0, 3]
[0, 0, 1, 0]
[0, 0, 1, 1]
[0, 0, 1, 2]
[0, 0, 1, 3]
[0, 0, 2, 0]
[0, 0, 2, 1]
[0, 0, 2, 2]
[0, 0, 2, 3]
[0, 0, 3, 3]
...and so on

问题在于不仅有四个索引而不是三个。但有些值是 3,我希望它最多只能达到 2

感谢您的建议。

最佳答案

问题在于:

  • 您的console.log 只能在最深级别执行。因此,请将 console.log 放入 else 子句中。

  • 基本情况发生在 loopNumber === maxNestedLoops - 1 时,因为这是数组的最后一个索引,因此 if 条件应与此相对应

     if (loopNumber < maxNestedLoops - 1){
         looper(loopNumber + 1);
     } else {
         console.log(indexes);
     }

关于javascript - 在javascript中创建N个嵌套循环的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73185950/

相关文章:

r - 遍历数据框和变量名

c - 从 C 中的字符串中删除子字符串

algorithm - 化简 log n/3i 的总和

c - 在C中的另一个函数内定义递归函数

sql - 在 Visual Studio (ado.net) 中超出了最大存储过程、函数、触发器或 View 嵌套级别,但在 SQL Server 中没有

javascript - 如何用material-ui设置时钟(timePicker)的颜色?

javascript - 如何在 Enter 键按下时操作列表元素

c - 使用月份和年份输入在 C 中打印儒略历?

javascript - 如何将 js 包含到 php/html 页面

javascript - Userscript - 有没有办法将 jquery 代码注入(inject)到 angularjs dom 中?