Рисовать символы рекурсией

190
10 марта 2018, 20:56
function drStRec(str, n) {
if (n == 0) {
    return;
}
document.write(str);
drStRec(str, n - 1);
}
drStRec("*", 10);

Хочу добавить еще один параметр, скажем "m", чтоб при drStRec("*", 5, 10) получилось 5 строк с 10 звездами. Если можно, с объяснением, как это сделали, чтоб понимать..

Answer 1

К сожалению, Вашу задачу решить невозможно. У Вас двойная рекурсия. И при выходе из одной, нужно знать, когда запустить вторую итерацию.

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

function writeLine(str, m) { 
  if (m != 0) { 
    document.write(str); 
    writeLine(str, m - 1); 
  } else { 
    document.write('<br/>'); 
  } 
} 
 
function drStRec(str, n, m) { 
  if (n != 0) { 
    writeLine(str, m); 
    drStRec(str, n - 1, m); 
  } 
} 
 
drStRec("*", 5, 10);

Еще один способ, передавать на всех уровнях рекурсии количество символов в строке. Тогда вторую итерацию можно начинать, передав это число

function drStRec(str, n, m, curChar) { 
  // Если номер текущего символа не переедан, то устанавливаем его в общее число символов 
  if (curChar === undefined) 
    curChar = m; 
  if (curChar != 0) { 
    document.write(str); 
    drStRec(str, n, m, curChar - 1); 
  } else { 
    document.write('<br/>'); 
    if (n != 0) 
      drStRec(str, n - 1, m); 
  } 
} 
 
drStRec("*", 5, 10);

Answer 2

function drStRec(str, n, m) { 
  if (n != 0) { //если n не равно 0 то выполнить вывод и вызвать функцию с n - 1 
    var res = ""; 
    for (var i = 0; i < m; i++) { //Цикл который создает строку с m звездами 
      res += str; 
    } 
    document.write(res + "<br>"); 
    drStRec(str, n - 1, m); 
  } 
} 
 
drStRec("*", 5, 10);

READ ALSO
Удаление изображения из массива формы

Удаление изображения из массива формы

Есть код, который выводит изображения, которые были добавлены в <input> и там есть кнопка удаления изображения, но у меня никак не получается...

186
Гиперссылки как у iCloud Pages

Гиперссылки как у iCloud Pages

Добрый день, как сделать гиперссылки как у iCloud Pages когда пишешь сайт и он сразу становится ссылкой как и в Google DocsИмеется div contenteditable="true"

122
input как отправить или снять фокус без form

input как отправить или снять фокус без form

Сайт запаковывается Cordova и становится приложением для AndroidЕсть несколько input, форма в моем случае не подходит, все они без неё

168
&#226;€™ при перекодировке текста с CP1252 в UTF-8

’ при перекодировке текста с CP1252 в UTF-8

В начале я имею вот такой текст:

220