Javascript 在递归函数中用静态变量替换全局变量

Javascript 在递归函数中用静态变量替换全局变量,javascript,recursion,Javascript,Recursion,我有一个函数,它记录函数调用的次数,函数在一个素数数组中找到一个目标数。我当前使用在全局范围中声明的计数器。如何将此计数器作为静态变量放入函数范围中,使其在每次调用函数时不发生更改 let primes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97] 让计数器=1 函数findTime(arr,目标){ 让我们猜一猜=arr[数学楼层(arr.length/2)] 如果(猜测>目标){ arr=a

我有一个函数,它记录函数调用的次数,函数在一个素数数组中找到一个目标数。我当前使用在全局范围中声明的计数器。如何将此计数器作为静态变量放入函数范围中,使其在每次调用函数时不发生更改

let primes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
让计数器=1
函数findTime(arr,目标){
让我们猜一猜=arr[数学楼层(arr.length/2)]
如果(猜测>目标){
arr=arr.拼接(0,arr.长度/2)
柜台++
FindTime(arr,目标)
}否则如果(猜测<目标){
arr=arr.slice(arr.length/2)
计数器+++| 1
FindTime(arr,目标)
}否则{
console.log('猜测:'+计数器)
log('目标为:'+猜测)
}
}
findprome(primes,2)
使函数返回更新的计数器,因此不必全局维护它;请参见
***
注释:

let primes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
函数findprome(arr、目标、计数器){//***
如果(计数器类型==“未定义”){//***
计数器=1;//***
}                                                    // ***
让我们猜一猜=arr[数学楼层(arr.length/2)]
如果(猜测>目标){
arr=arr.拼接(0,arr.长度/2)
返回FindTime(arr、目标、计数器+1)//***
}否则如果(猜测<目标){
arr=arr.slice(arr.length/2)
返回FindTime(arr、目标、计数器+1)//***
}否则{
console.log('猜测:'+计数器)
log('目标为:'+猜测)
返回计数器;
}
}
findprome(primes,2)
使函数返回更新的计数器,因此不必全局维护它;请参见
***
注释:

let primes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
函数findprome(arr、目标、计数器){//***
如果(计数器类型==“未定义”){//***
计数器=1;//***
}                                                    // ***
让我们猜一猜=arr[数学楼层(arr.length/2)]
如果(猜测>目标){
arr=arr.拼接(0,arr.长度/2)
返回FindTime(arr、目标、计数器+1)//***
}否则如果(猜测<目标){
arr=arr.slice(arr.length/2)
返回FindTime(arr、目标、计数器+1)//***
}否则{
console.log('猜测:'+计数器)
log('目标为:'+猜测)
返回计数器;
}
}

FindTime(primes,2)
您可以将计数器包装在函数范围内

let primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

function findPrime(arr, target) {
    var counter = 1
    function findPrimeInner(arr, target){
        var guess = arr[Math.floor(arr.length/2)]

        if (guess > target) {
            arr = arr.splice(0, arr.length/2)
            counter ++
            findPrimeInner(arr,target)
        }else if (guess < target){

            arr = arr.slice(arr.length/2)
            counter ++ || 1
            findPrimeInner(arr,target)

        }else {
            console.log('guesses taken: ' + counter)
            console.log('target is: ' + guess)
        }
    }
    findPrimeInner(arr, target);
}

findPrime(primes, 5)
let primes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
函数findTime(arr,目标){
变量计数器=1
函数findPrimeInner(arr,目标){
var GUSE=arr[数学楼层(arr.length/2)]
如果(猜测>目标){
arr=arr.拼接(0,arr.长度/2)
柜台++
findPrimeInner(arr,目标)
}否则如果(猜测<目标){
arr=arr.slice(arr.length/2)
计数器+++| 1
findPrimeInner(arr,目标)
}否则{
console.log('猜测:'+计数器)
log('目标为:'+猜测)
}
}
findPrimeInner(arr,目标);
}
FindTime(素数,5)

您可以将计数器包装在功能范围内

let primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

function findPrime(arr, target) {
    var counter = 1
    function findPrimeInner(arr, target){
        var guess = arr[Math.floor(arr.length/2)]

        if (guess > target) {
            arr = arr.splice(0, arr.length/2)
            counter ++
            findPrimeInner(arr,target)
        }else if (guess < target){

            arr = arr.slice(arr.length/2)
            counter ++ || 1
            findPrimeInner(arr,target)

        }else {
            console.log('guesses taken: ' + counter)
            console.log('target is: ' + guess)
        }
    }
    findPrimeInner(arr, target);
}

findPrime(primes, 5)
let primes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
函数findTime(arr,目标){
变量计数器=1
函数findPrimeInner(arr,目标){
var GUSE=arr[数学楼层(arr.length/2)]
如果(猜测>目标){
arr=arr.拼接(0,arr.长度/2)
柜台++
findPrimeInner(arr,目标)
}否则如果(猜测<目标){
arr=arr.slice(arr.length/2)
计数器+++| 1
findPrimeInner(arr,目标)
}否则{
console.log('猜测:'+计数器)
log('目标为:'+猜测)
}
}
findPrimeInner(arr,目标);
}
FindTime(素数,5)

旁注:您的
计数器+++|124; 1
行的
|1
部分根本不起任何作用。旁注:您的
计数器+++|1
行的
|1
部分根本不起任何作用。