Рекурсивное добавление в строки в JS

#javascript #recursion

#javascript #рекурсия

Вопрос:

Я решаю проблему рекурсии, которая возвращает строку «hi», где первое «hi» имеет заглавную букву H, а строка заканчивается восклицательным знаком. У меня пока есть приведенный ниже код, но я не уверен, как предотвратить последующие появления «hi» с заглавной буквы H. Любые рекомендации будут приветствоваться.

 function greeting(n) {
  if (n === 0) {
    return "";
  } else if (n === 1) {
    return "Hi!"
  } else {
    return `${'Hi'   greeting(n - 1)}`
  }
}
console.log(greeting(3)) // should return Hihihi!
console.log(greeting(5)) // should return Hihihihihi! 

Комментарии:

1. Мне это нужно, чтобы вернуть Хихихи! В моем текущем коде все буквы H заглавными буквами

2. .toLowerCase() В вашем коде не хватает только a . ${'Hi' greeting(n - 1).toLowerCase()} . Вам не нужен этот n === 1 шаг.

Ответ №1:

Один из способов обойти вашу проблему — передать функции флаг, который указывает, является ли это первым вызовом, и только в этом случае заглавными hi буквами . Обратите внимание, что вы можете немного упростить код, вернув ! when n == 0 ; тогда вам не нужен специальный регистр n == 1 :

 function greeting (n, first = true) {
  if (n === 0) {
    return "!";
  } 
  else {
    return `${(first ? 'Hi' : 'hi')   greeting(n - 1, false)}`
  } 
}
console.log(greeting(3)) // should return Hihihi!
console.log(greeting(5)) // should return Hihihihihi! 

Ответ №2:

.toLowerCase() В вашем коде не хватает только a .

 `${'Hi'   greeting(n - 1).toLowerCase()}`
 

Вам не нужен этот n === 1 шаг.

 function greeting(n) {
  if (n === 0) {
    return "!";
  } else {
    return `${'Hi'   greeting(n - 1).toLowerCase()}`
    //------------------------------^^^^^^^^^^^^^^
  }
}
console.log(greeting(3)) // should return Hihihi!
console.log(greeting(5)) // should return Hihihihihi!