猿问

Q:javascript 递归如何实时返回当时的值,目前返回值为递归完成后变量的值,创建闭包好像也没能达预期?

varcombine=function(n,k){
functionbacktracking(n,k){
if(k){//min(k)=1,whenk=0break
for(vari=1;i<=n;++i){
if(!used[i]){
used[i]=true;
solution[k-1]=i;//solution.length=k
//console.log(solution.length);
arguments.callee(n,k-1);
used[i]=false;
}
}
}else{
console.log(solution);
returnresult.push(solution);//?
}
}
varused=[],
result=[],
solution=[];
if(k>n){
return[];
}else{
backtracking(n,k);
}
returnresult;
};
combine(4,2);
solutionoutput:
[2,1]
[3,1]
[4,1]
[1,2]
[3,2]
[4,2]
[1,3]
[2,3]
[4,3]
[1,4]
[2,4]
[3,4]
resultoutput:
[[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4]]
resultexpect:
[[2,1],[3,1],[4,1],[1,2],[3,2],[4,2],[1,3],[2,3],[4,3],[1,4],[2,4],[3,4]]
至尊宝的传说
浏览 283回答 2
2回答

米琪卡哇伊

returnresult.push(solution);改为如下即可:returnresult.push(solution.slice(0));

长风秋雁

引用类型每次修改都是同一个。你需要创建一个副本,随便调用数组的一个能返回浅拷贝的方法就行了。比如楼上的slice()或者cancat等等
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答