Как кодировать встроенную функцию Javascript в рекурсивную функцию (используя глобальные переменные) - PullRequest
0 голосов
/ 23 марта 2019

Я новичок в JavaScript и застрял в программе string.replace, которая требует использования рекурсивных функций и глобальных переменных.Цель состоит в том, чтобы заменить любые вхождения слова / фразы (sub_key) другим словом / фразой (sub_value), а затем дополнить концы предложения sub_value.

Это моебазовый код:

function Obscure(sub_key, sub_value, sentence) {
  var obscuredSentence = sentence.replace(sub_key, sub_value);
  var obscuredSentence = sub_value + " " + obscuredSentence + " " + sub_value;
  return obscuredSentence;
}

console.log(Obscure("the", "the goat", "I want the money")

    //--> "the goat I want the goat money the goat" );

Однако мне нужно написать рекурсивную функцию, которая запускается дважды (и только дважды), чтобы продолжить замену sub_key на sub_value в случае, если sub_value также содержит sub_key (например, «козел»).Мое последнее предложение должно звучать так: «козел, я хочу, чтобы козел козел деньги козел».

Я пробовал этот код, но он переполняет стек (ха):

function Obscure(sub_key, sub_value, sentence) {
  var obscuredSentence = sentence.replace(sub_key, sub_value);

  for (var count = 1; count < 2; count++) {
    return Obscure(sub_key, sub_value, sentence);
  }

  var obscuredSentence = sub_value + " " + obscuredSentence + " " + sub_value;
  return obscuredSentence;
}

console.log(Obscure("the", "the goat", "I want the money"));
//"RangeError: Maximum call stack size exceeded (line 2 in function Obscure)"

Любая помощь / совет высоко ценится.Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

for( не рекурсивно, это итеративно.

Вам нужны две функции: вспомогательная функция с рекурсивным вызовом и другая, только заботящаяся о заполнении концов и вызывающая рекурсивный fn.Что-то вроде

function obscureInside(sub_key, sub_value, sentence, repetitions) {
  if (repetitions <= 0) {
    return sentence;
  }

  var sentenceAfterSingleRun = sentence.replace(sub_key, sub_value);
  return obscureInside(sub_key, sub_value, sentenceAfterSingleRun, repetitions - 1);

}

function obscure(sub_key, sub_value, sentence) {
  var obscuredSentence = obscureInside(sub_key, sub_value, sentence, 2);
  return sub_value + " " + obscuredSentence + " " + sub_value;
}

console.log(obscure("the", "the goat", "I want the money"));
0 голосов
/ 23 марта 2019

Я внес небольшое изменение в ваш код, который приведен ниже, и он должен решить вашу проблему, если вы хотите выполнить его только два раза.

var count = 1;

function Obscure(sub_key, sub_value, sentence) {
  var obscuredSentence = sentence.replace(sub_key, sub_value);

  for (; count < 2;) {
    count++;
    return Obscure(sub_key, sub_value, obscuredSentence);
  }

  var obscuredSentence = sub_value + " " + obscuredSentence + " " + sub_value;
  return obscuredSentence;
}

console.log(Obscure("the", "the goat", "I want the money"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...