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

标签 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]
let counter = 1

function findPrime(arr, target){

  let guess = arr[Math.floor(arr.length/2)]

  if (guess > target){

    arr = arr.splice(0, arr.length/2)
    counter ++
    findPrime(arr,target)

  }else if (guess < target){

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

  }else{

    console.log('guesses taken: ' + counter)
    console.log('target is: ' + guess)

  }
}


findPrime(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, counter) {             // ***
  if (typeof counter === "undefined") {                // ***
    counter = 1;                                       // ***
  }                                                    // ***

  let guess = arr[Math.floor(arr.length / 2)]

  if (guess > target) {

    arr = arr.splice(0, arr.length / 2)
    return findPrime(arr, target, counter + 1)         // ***

  } else if (guess < target) {

    arr = arr.slice(arr.length / 2)
    return findPrime(arr, target, counter + 1)         // ***

  } else {

    console.log('guesses taken: ' + counter)
    console.log('target is: ' + guess)
    return counter;
  }
}


findPrime(primes, 2)

一般来说,递归函数接受并返回允许它们跟踪和控制递归的信息。虽然您可以通过关闭非全局变量来完成此操作,但这并不是通常的做法(尽管也有异常(exception))。

关于javascript - 在递归函数中用静态变量替换全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41808902/

相关文章:

javascript - 如何在此递归 Javascript 中将此 D3.js 元素发送到另一个元素的点击函数

javascript - 可以设置网站的加载时间吗?

javascript - Cordova 防止 webview 拖拽字段焦点?

javascript - 为什么时间变量不改变?

java - 写一个算法来找到最大值

c - 从输入的字符数组中查找所有可能的单词(排列)

javascript - 没有设置QueryClient,使用QueryClientProvider设置一个

javascript - React - 使用 Map 渲染对象数组

sql - 递归 CTE Material list

java - 递归语句调用另一个递归语句?