【发布时间】:2016-06-25 23:09:53
【问题描述】:
为清楚起见进行了编辑:
代码旨在记住有效属性所在的位置以及有限数量的可能路径。
例如,在 4x4 网格中:从 (1,1) 开始,那么您可以走 N、S、E 或 W 吗? N(即(1,2))是新的开始。从 (1,2): N?不,E?是的。从 (2,2) 重新开始。继续,直到探索完所有可能的路径。
function getTestSubjects(current){
//returns an array unique to current
}
var successes = [];
var currentPath = [];
function nextStep(current){
currentPath.push(current);
current.valid = false;
if (currentPath.length === desiredLength){
successes.push(currentPath);
//line X
return
}
var testSubjects = getTestSubjects(current);
for(i=0;i<testSubjects.length;i++){
if(testSubjects[i].valid === true){
nextStep(testSubjects[i])
}
}
}
我的问题与递归函数中变量的局部性有关。 每次调用 nextStep() 时,都会创建一个唯一的局部变量 testSubjects, 还是同一个变量(nextStep() 的第一次调用的本地变量)会改变它所持有的内容?
当for循环到达testSubjects[i].valid === false的时候,会不会回到之前的nextStep调用,继续循环?
另外,如果在lineX,我写currentPath = []清空路径,继续寻找其他成功的路径,会不会影响已经推送到success数组的currentPath?
我希望这是有道理的。我仍然是一个婴儿程序员。请询问您是否需要任何澄清并提前感谢!
【问题讨论】:
-
testSubjects[i].valid = false不会出现在您包含的脚本中的任何位置。此外,在if(testSubjects[i].valid = true)行中,您需要使用相等运算符,可能是===。也就是说,如果valid是布尔类型,您可以执行以下操作:if(testSubjects[i].valid)。 -
哦,好点子!已编辑。
标签: javascript variables recursion scope