【问题标题】:Scope within recursive function?递归函数的范围?
【发布时间】: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


【解决方案1】:

是的,每次都会创建一个唯一的局部变量。 是的,它会返回并继续 for 循环。

我认为在找到成功的路径后继续搜索是不明智的。取决于您创建的唯一数组.. 似乎您可以有一个无限循环?

您的独特阵列是否越来越小?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2014-05-31
    • 2013-11-17
    • 2020-07-29
    • 2018-02-25
    • 2021-10-25
    • 2021-07-15
    相关资源
    最近更新 更多