#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!