Javascript递归的问题
我目前正在尝试编写一个脚本,以确定在一个数组中可以进行的最小“跳跃”次数,从而返回到初始起始次数。起始编号始终是数组中的最大编号 例如,如果数组是Javascript递归的问题,javascript,arrays,recursion,Javascript,Arrays,Recursion,我目前正在尝试编写一个脚本,以确定在一个数组中可以进行的最小“跳跃”次数,从而返回到初始起始次数。起始编号始终是数组中的最大编号 例如,如果数组是[2,3,5,6,1],那么起始数字将是6,因为它是最大的。然后你可以向左或向右跳转6个位置(你可以选择),你的下一个数字就是你的终点。假设我们走对了,我们将以1结束,因为我们将循环回到数组的开头。然后,您可以向左走1,然后再次回到6。因此,最小跳跃次数为2 我编写了以下函数来获取输入数组并确定最小跳转次数,但是,search()函数中的递归没有像我所
[2,3,5,6,1]
,那么起始数字将是6,因为它是最大的。然后你可以向左或向右跳转6个位置(你可以选择),你的下一个数字就是你的终点。假设我们走对了,我们将以1
结束,因为我们将循环回到数组的开头。然后,您可以向左走1
,然后再次回到6
。因此,最小跳跃次数为2
我编写了以下函数来获取输入数组并确定最小跳转次数,但是,search()
函数中的递归没有像我所希望的那样工作
每个搜索函数调用自身2次(左一次,右一次),但是不断递增的count
变量会变得“混乱”。一旦一行递归结束(当count>arr.length
时),我希望它返回到上一步并执行正确的递归行。但是count
变量不会恢复到上一步(保持原样),因此整个函数将停止
TL DR:如何使javascript函数变量保持不变,即使再次调用函数并覆盖变量
function ArrayJumping(arr) {
//Find the largest number
var startingPos=arr.indexOf(Math.max.apply(null, arr));
//Find the multiple we are searching for
var multiple=arr.length;
return search(startingPos,multiple,arr,startingPos+1,0);
}
function search(pos,mult,arr,target,count) {
if (count>arr.length) {
return false;
}
var tpos=pos+1;
if ((tpos==target && count!=0) || (tpos%target==0 && count!=0)) {
return count;
}
for (var direction=-1;direction<=1;direction+=2) {
nPos=getRealPos(pos+(direction*arr[pos]),arr);
var result=search(nPos,mult,arr,target,count+1);
if (result!=false) {
return result;
}
}
}
function getRealPos(n,numArr) {
if (n>=0) {
while (n>numArr.length) {
n-=numArr.length;
}
} else {
while (n<0) {
n+=numArr.length;
}
}
return n;
}
函数数组跳转(arr){
//找到最大的数字
var startingPos=arr.indexOf(Math.max.apply(null,arr));
//找到我们正在搜索的倍数
var倍数=阵列长度;
返回搜索(起始位置、多个、arr、起始位置+1,0);
}
功能搜索(pos、mult、arr、目标、计数){
如果(计数>阵列长度){
返回false;
}
var tpos=位置+1;
如果((tpos==target&&count!=0)| |(tpos%target==0&&count!=0)){
返回计数;
}
对于(变量方向=-1;方向=0){
而(n>努马长度){
n-=努马长度;
}
}否则{
while(n再问一遍问题是什么?这有点误导,你能重新表述一下吗?基本上@Leo,当你从函数本身调用函数时,解析到函数的所有变量都会被新变量覆盖(它是同一个函数)如果要使用与第一次调用相关的变量从函数本身调用两次,则会出现此问题。因为您只调用了一次函数,而第一次调用的变量会被覆盖