为清晰起见编辑:
该代码旨在记住它在有效属性中的位置,并且存在有限数量的可能路径。
例如,在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])
}
}
}
&#13;
我的问题涉及递归函数中变量的局部性。 每次调用nextStep()时,都会创建一个唯一的局部变量testSubjects, 或者相同的变量(nextStep()的第一次调用的本地变量)是否会改变它的含义?
当for循环到达testSubjects [i] .valid === false的点时,它会返回到nextStep的上一次调用并继续循环吗?
另外,如果在lineX,我写currentPath = []来清除路径并继续搜索其他成功路径,它会影响已经推送到成功数组的currentPath吗?
我希望这是有道理的。我还是个程序员。请询问您是否需要提前澄清并提前致谢!
答案 0 :(得分:0)
是的,每次都会生成一个唯一的局部变量。 是的,它将返回并继续for循环。
我认为在找到成功的道路后继续搜索是明智的。取决于你创建的独特数组..似乎你可以有一个无限循环?
你的独特阵列越来越小了吗?