【发布时间】:2021-08-24 14:36:06
【问题描述】:
我正在尝试使用递归来解决问题。目标是获取一个输入字符串句子,并返回一个新句子,其中每个单词的第一个字母被删除,直到每个单词的第一个字母是元音。
这是我的尝试:
function deleteConsonants(sentence) {
let words = sentence.split(" ");
let newWords = [];
for (let i = 0; i < words.length; i++) {
let newWord = shifter(words[i]);
newWords.push(newWord);
}
return newWords.join(" ");
}
function shifter(word) {
let vowels = "aeiouAEIOU";
let wordArr = word.split("")
if (!vowels.includes(wordArr[0])) {
wordArr.shift()
newWordArr = wordArr.join("")
shifter(newWordArr)
}
return word
}
// let a = deleteConsonants("I love pizza") // "I ove izza"
// let b = deleteConsonants("This is blasphemy sir") // "is is asphemy ir"
// console.log(a)
// console.log(b)
我运行了 Chrome 的调试器,似乎函数“shifter”工作正常,直到它到达返回单词的步骤。我的变量“newWord”,被推送到新数组的变量,由于某种原因最终成为旧的,未更改的单词版本。
【问题讨论】:
-
应该是
return shifter(newWordArr) -
我刚才在 replit 中尝试了这个,但它给了我错误“超出最大调用堆栈大小”
-
那你放错地方了,我只加了return语句,把return放在递归调用之前。
-
@luk2302 想让你把退货放在这里; “return shifter(newWordArr)”~第 19 行我刚刚复制了它,它可以工作。
标签: javascript recursion return-value