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
部分根本不起任何作用。