Увеличение вложенности от пользовательского ввода

#javascript

#javascript

Вопрос:

Я хочу создать простую вложенную систему циклов for, в которой есть один внешний цикл, а затем неопределенное количество очень похожих циклов for, вложенных друг в друга внутри этого

Итак, что-то вроде этого

 for (var outerindex = 0; outerindex < x; outerindex   // Outer loop 
{        for (var innerindex1 = 0; innerindex1 < x; innerindex1  ) //first innerLoop
    {
        sameFunction(); //
        for (var innerindex2 = 0; innerindex2 < x; innerindex2  ) //second innerloop
        {
            sameFunction();
            for (var innerindex...
            {
                .....
            }
        }
    }
} 
  

Итак, что я хочу сделать, это изменить количество внутренних циклов на переменную. Я думаю, мне нужно использовать какую-то функцию, но у меня есть идея, с чего начать.

Ответ №1:

Для этого используйте рекурсию:

 function myLoop(i) {
  if (i > 0) {
    console.log('Inner function call!');
    myLoop(i - 1);
  } else {
    console.log('Final call');
  }
}

myLoop(7);  

Ответ №2:

Вы можете достичь этого с помощью рекурсии.

Просто вызовите функцию с требуемой глубиной циклов for, запустите цикл и вызовите эту функцию с глубиной — 1 .

 function recurse(depth){
  if(depth <= 0) //Terminal statement to end the recursion
    return;
  for(var innerindex = 0; innerindex < depth; innerindex  ){
     someFunction(depth,innerindex);
     recurse(depth -1);
  }
}
function someFunction(depth, innerindex){
  console.log('someFunction(depth: ' depth ', innerindex:' innerindex ');');
}
recurse(3);  

Но для глубокого (например,> 100) depth он съест весь ваш стек и потребует много памяти.