【发布时间】:2014-06-04 15:36:20
【问题描述】:
我正在尝试在 javascript 中实现递归回溯算法(确定单词是否为字谜)。粗略的想法是我置换不同字母的每个组合,然后将最终单词与单词表进行比较。
我已经让代码工作了,但是语法有点难看,因为为了避免带有闭包错误的 for 循环,我使用了一个自调用匿名函数,存储了该值,如果它是真的,返回以中断 for 循环。我只是想知道是否有更聪明的方法来实现代码,所以我不需要担心闭包?
var wordList = ['boats', 'horse', 'cow'];
var input = 'oastb';
function isAnagram(sofar, remaining) {
if (remaining.length === 0) {
console.log('returning: ' + (wordList.indexOf(sofar) !== -1))
if (wordList.indexOf(sofar) !== -1) {
console.log(sofar);
return true;
} else {
return false;
}
} else {
for (var i = 0; i < remaining.length; i++) {
var found = (function(index) {
if (isAnagram(sofar + remaining[index], remaining.substring(0, index) + remaining.substring(index + 1))) return true;
})(i);
if(found) return true;
};
}
return false;
}
isAnagram('', input);
【问题讨论】:
标签: javascript recursion closures