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,当你从函数本身调用函数时,解析到函数的所有变量都会被新变量覆盖(它是同一个函数)如果要使用与第一次调用相关的变量从函数本身调用两次,则会出现此问题。因为您只调用了一次函数,而第一次调用的变量会被覆盖