Рубрики
Без рубрики

Проблемы лестницы: повторять, итерация и Стратегии рекурсии

Эта следующая серия проблем кода все имеет отношение к упорядочению элементов в матричной шаблоне, а P … Помечено JavaScript, CodeNewie, карьеру, вызов.

Эта следующая серия проблем кода все связано с аранжировкой элементов в матричной шаблоне и распечатывает результаты. Каждый может быть решен несколькими способами, используя итерацию или рекурсию. Мы начнем с моделей лестницы в этом посте, но оставайтесь на улице для других на будущих постах. Давайте прыгнем!

1. Создание лестницы

В вариациях этой проблемы вас просят распечатать форму лестницы с N уровни. Например, вы можете проверить Проблема лестницы на HackeRrank Отказ Некоторые вызовы могут попросить вас распечатать шаги, стоящие вправо, влево или даже с ног на голову, но аналогичная стратегия может использоваться для каждой вариации. Именно этот пример нам дают ряд уровней, и просят распечатать лестницу с N уровни, восходящие слева направо, вроде это:

staircase(4)

// Result:

   #
  ##
 ###
####

Возможные стратегии

Первый ключ для решения этой проблемы через любую из стратегий включает в себя визуализацию пример лестницы и разрушения его в матрицу пространств и символов, как так:

# Col 0.
# # Col 1.
# # # Col 2.
# # # # Col 3.

Если бы у нас было бы 4 строк и 4 столбца. Было бы 4 символа в нижней строке, а нулевые пространства. Видя строки и колонны визуально могут помочь нам спуститься к кодированию.

Стратегия повторения строки

Наиболее краткое решение этой проблемы используют один цикл для перебрызгивания через строки и создать строку с использованием метода повторения.

function staircase(n) {
    for (i=0; i

Хотя это может работать с более легкими вариациями проблемой лестницы, она, вероятно, сломалась с более сложными проблемами, поэтому важно знать итерацию и стратегии рекурсионных стратегию ниже.

Стратегия итерации

Поскольку размещение символов зависит от местоположения на основе рядов и столбцов, мы можем использовать итерацию через строки и столбцы, чтобы начать наше решение. Мы распечатаем каждую строку к консоли на основе строк, но организуем символы в каждой строке, обратившись к столбцам. Следовательно, мы можем начать псевдокодирование нашего решения, как это:

// function staircase(n) {
  // iterate through rows {
    // set up empty string for the given row

    // iterate through columns {
      // if the column number is less than or equal to the row 
        // add # to the end of the string
    // otherwise
      // add an empty space to the beginning of the string
    // }

    // console.log the string for the row
  // }
// }

Далее мы можем записать его под нашими примечаниями:

function staircase(n) {
    // iterate through rows
    for (let row = 0; row

Полный код без комментариев:

function staircase(n) {
    for (let row = 0; row //

   #
  ##
 ###
####

Стратегия рекурсии

В этой стратегии мы все равно будем использовать диаграмму матрицы, чтобы помочь нам визуализировать строки и столбцы, которые составляют лестницу.

# Col 0.
# # Col 1.
# # # Col 2.
# # # # Col 3.

Однако вместо того, чтобы итерацию через строки и столбцы мы позвоним в функцию лестницы для каждой строки и построим строку для представления каждой строки на основе количества столбцов в матрице.

В псевдокоде вот что нам нужно будет делать:

// set default values for arguments that will be needed in each function call (row number, and string)

  // set up a base case so that the recursive function calls will stop (when n reaches zero)


  // set up a conditional to account for the cases when the string length for a row is full (n===string.length)

      // print out the row (string)

      // call the function to start work on the next row (row + 1)


  // account for adding characters to the string if the row is not yet full (n < string.length), based on comparing the string length with the row number

  // call the function to continue working on the row, with the current row and updated string passed as arguments

В коде мы в конечном итоге с:

function staircase(n, row=0, string="") {
    if (n===row) {
        return
    }

    if (n===string.length) {
        console.log(string)
        return staircase(n, row+1)
    }

    const add = string.length <= row ? "#" : " "
    staircase(n, row, add + string)
}

Применение стратегий к другим вариациям

Чтобы решить подобные вызовы лестниц с несколькими разными вариациями, вы, вероятно, просто должны будут изменить небольшие детали в вашем коде. Вытяните ожидаемый выход на строки и столбцы и задайте себе эти вопросы:

  • Какую линию/строки мне нужно будет изменить, чтобы перевернуть направление шагов (влево или вправо, или верх или внизу)?
  • Какую линию/строки мне нужно для изменения числа, договоренности или шаблонов символов и пробелов в каждой строке?

Используя аналогичные стратегии, вы должны быть в состоянии выяснить вызовы пирамиды, такие как этот:

Напишите функцию, которая возьмет в один параметр, высоту пирамиды и распечатает форму пирамиды с этим многими уровнями.

Например, Пирамида (4) приведет к выводу:

   x  
  xxx
 xxxxx
xxxxxxx

Вы видели другие вариации по лестнице или пирамидальные проблемы? Поделитесь их ниже!

Оригинал: “https://dev.to/jessesbyers/staircase-challenges-repeat-iteration-and-recursion-strategies-2f67”