Я разработчик Javascript по профессии и решил дать вращаться. В качестве учебного упражнения я решил перенести функцию в один из моих проектов узлов, но не могу заставить ее работать для меня. Целью функции является отображение всех допустимых английских слов, которые могут быть сделаны из букв, представленных другим словом (я создаю многопользовательскую версию Text Twist). Например, findAllWords («танцы») вернется ['can', 'scan', 'dance', 'dances' и т. Д.]. Я достиг этого, перейдя на три, построенный из английского списка слов.Recursion in Go
Вот реализация функция в Javascript:
self.findAllWords = function(letters = [], trie = dictionary, curString = '') {
let words = [];
letters = typeof letters === 'string' ? letters.split('') : letters;
letters.forEach((letter,i,ar) => {
if (!trie[letter]) return;
let curWord = curString + letter;
let newTrie = trie[letter];
let newLetters = [...ar.slice(0,i),...ar.slice(i+1)];
if (trie[letter][FLAG_INDEX]) words.push(curWord);
if (self.isValidPrefix(curWord, dictionary)) words = [...words,...self.findAllWords(newLetters,newTrie,curWord)];
});
return uniq(words);
}
и вот моя попытка тиражирования его в Go (с помощью реализации this TRIE):
func FindAllWords(letters []rune, node *Node, curString string) []string {
words := []string{}
for i, let := range letters {
n, ok := node.Children()[let]
if !ok {
return words
}
curWord := curString + string(n.val)
newLetters := []rune{}
newLetters = append(newLetters, letters[:i]...)
newLetters = append(newLetters, letters[i+1:]...)
if n.term {
words = append(words, curWord)
}
words = append(words, FindAllWords(newLetters, n, curWord)...)
}
return words
}
Очень хотелось бы знать, почему это провал , как я могу заставить его работать, и любые соглашения, которые я злоупотребляю/не использую. Благодаря!
Что происходит, когда вы пытаетесь с помощью этого кода? Имеет ли ошибка или дает неверные результаты? – MathSquared
Какая ошибка? –
Я просто получаю пустой кусочек. Я почти уверен, что строка 8 должна быть разбита вместо возврата, как указал jdd0, но это не решает проблему. – William