为了返回所提供句子中最长单词的长度。 我的尝试:
function findLongestWord(str) {
var arr = str.split(" ");
function re(arr) {
if (arr[0].length >= arr[1].length) {arr.splice(1,1); return re(arr);}
/*if the first element's length is larger than the second element's length,
splice the smaller element, then call its own function re(arr) using the
array with the second element being spliced, which to my understanding
is calling
re(["Theeeee","brown","fox","jumped","over","the","lazy","dog"])*/
else if (arr[0].length < arr[1].length) {arr.splice(0,1); return re(arr);}
}
return arr[0].length;
findLongestWord("Theeeee quick brown fox jumped over the lazy dog");
关于第一个if语句之后的注释,我是否误解了有关递归如何工作的任何方面?
使用For循环的代码:
function findLongestWord(str) {
var arr = str.split(" ");
for (i = arr.length; i > 1 ;i--) {
if (arr[0].length >= arr[1].length) {arr.splice(1,1);}
else if (arr[0].length < arr[1].length) {arr.splice(0,1);}
}
return arr[0].length;
findLongestWord("The quick brown fox jumped over the lazy dog");
答案 0 :(得分:0)
我会使用reduce
而不是递归。顺便说一句,你应该应用克里斯托弗的推荐。我已经格式化了你的代码,它适用于我。只有一个缺失的支架。
let str = 'Some random words';
let result = str.split(' ').reduce(function(ret, el) {
return el.length > ret ? el.length : ret;
}, 0);
console.log(result);
&#13;
你的代码有两个错误,你没有控制你的数组只有一个项而你根本没有调用函数re
的情况。
function findLongestWord(str) {
var arr = str.split(" ");
function re(arr) {
if(arr.length === 1) return arr;
if (arr[0].length >= arr[1].length) {
arr.splice(1,1);
return re(arr);
} else if (arr[0].length < arr[1].length) {
arr.splice(0,1);
return re(arr);
}
}
re(arr);
return arr[0].length;
}
let res = findLongestWord("The quick brown fox jumped over the lazy dog");
console.log(res);
&#13;
答案 1 :(得分:0)
您只需使用Math.max即可获得所需的结果。不需要递归。
let sentence = "The quick brown fox jumped over the lazy dog";
function longestWord(s) {
return Math.max(...s.split(" ").map(v => v.length));
}
console.log(longestWord(sentence))
答案 2 :(得分:0)
递归意味着您可以从其主体调用相同的函数,直到满足某些条件。
您的代码可以通过以下方式重写:
function findLongestWord(sentence, word) {
var wordsList = sentence.split(" ");
var lastWord = wordsList.pop();
var longestWord = lastWord.length > word.length ? lastWord : word;
if (sentence.length > 0) {
var newSentence = wordsList.join(" ");
return findLongestWord(newSentence, longestWord);
} else {
return longestWord;
}
};
var longestWord = findLongestWord("The quick brown fox jumped over the lazy dog", '');
console.log(longestWord);
您可以通过多种方式查看条件。在许多情况下,您将变量称为累加器。在这里,我只使用了作为参数传递的sentece。我检查是否有任何单词(将其拆分为单词表后)。如果没有单词我会返回最终结果。我希望我的例子能让你的主题更加清晰。