正确方法:使用位高权重的全局变量!
我们不得不换个思路,既然在递归函数的内部无法实现想法,那么我们就把目光移到函数体外,另辟蹊径:
首先,在递归函数之外定义一个全局变量:isGo,布尔型,初始值为真,意思是可以继续循环。
接着,在递归循环的一开始就设置判断机制,一旦isGo的值为假,就层层阻止,直到退出所有层的循环,从而达到强制退出递归的目的。
if(isGo==false){
return
}
最后,在递归的“满足条件”代码中增加如下语句:
isGo =false;
下面给出修改后的代码:
var isGo:Boolean=true
functionarr_all(pre:Array,nex:Array) {
if(isGo==false){return}
var j:uint=nex.length;
if (j==1) {
var t=[];
for (var i:uint=0;i
t.push(pre[i]);
}
t.push(nex[0]);
isGo =false;
returninfo.appendText("
"+pc(t));//..out........
}
for (var k:uint=0; k var p:Array=pre.slice();
var s:Array=nex.slice();
p.push(s.splice(k,1));
arr_all(p,s);
}
}
测试结果叫人心花怒放。图3:
本教程要传授的经验是:要想强制退出递归循环,可以通过一个外部变量来实现,只要满足条件就改变这个变量的值,只要这个变量的值变了就层层阻止循环,直到退出递归函数!
来自实践的体会,绝对原创的经验。
作者:张志晨
2012.5.5