Javascript 数组应该在递归函数中

Javascript 数组应该在递归函数中,javascript,arrays,function,recursion,Javascript,Arrays,Function,Recursion,代码是用JavaScript编写的。我的问题是如何在函数中创建arr数组。我不希望它超出功能范围。上面的代码显示了函数外部的arr数组,我不喜欢这样。你可以提出任何建议,因为我的目标是找到36的所有阶乘。答案应该是这样的数组[36,18,12,9,6,4,3,2,1] var arr= [] function factor(number, divisor) { if(divisor >= 1) { if(number % divisor == 0) {

代码是用JavaScript编写的。我的问题是如何在函数中创建
arr
数组。我不希望它超出功能范围。上面的代码显示了函数外部的
arr
数组,我不喜欢这样。你可以提出任何建议,因为我的目标是找到36的所有阶乘。答案应该是这样的数组
[36,18,12,9,6,4,3,2,1]

var arr= []
function factor(number, divisor) {
    if(divisor >= 1) { 
        if(number % divisor == 0) {
            arr.push(divisor)
            return factor(number, divisor - 1)
        } else {
            return factor(number, divisor - 1);
        }
    }
    return arr;
}

console.log("")
console.log("factor of a number 36")
console.log(factor(36,36)) 
像这样

function factor(number, divisor, arr) {
  arr = arr || [];

  if (divisor >= 1) {
    if (number % divisor === 0) {
      arr.push(divisor);
      return factor(number, divisor - 1, arr);
    } else {
      return factor(number, divisor - 1, arr);
    }
  }

  return arr;
}

或者您可以这样做,以便只传递两个参数

function factor(number, divisor) {
  return function _factor(number, divisor, arr) {
    arr = arr || [];

    if (divisor >= 1) {
      if (number % divisor === 0) {
        arr.push(divisor);
        return _factor(number, divisor - 1, arr);
      } else {
        return _factor(number, divisor - 1, arr);
      }
    }

    return arr;
  }(number, divisor);
}

喜欢吗

 function factor(number, divisor, s)
  {
  if(number==divisor) arr = [];
  if(divisor >= 1)
  { 
  if(number % divisor == 0)
  {
    arr.push(divisor)
    return factor(number, divisor - 1)
  }
  else
  {
     return factor(number, divisor - 1);
  }
   }
  return arr;
 }

工作

声明arr内部因素函数:

function factor(number, divisor, s) {
        var arr = []
        if (divisor >= 1) {
            if (number % divisor == 0) {
                arr.push(divisor)
                return factor(number, divisor - 1)
            } else {
                return factor(number, divisor - 1);
            }
        }
        return arr;
    }

明亮的谢谢你,亚历山大。我在发帖之前就试过你的版本了。您的版本中出现的情况是“var arr=[];”在每次调用递归lol时都重置为空数组。对于上面的Alexander,数组不会重置为空。很聪明,对不起。我应该在回答之前尝试一下。@void您将
arr
设置为全局变量(我可以在函数
factor
之外获得
arr
)-看,这是不对的。。是的,我尝试过投票,但我今天刚刚注册了stackoverflow,就像现在一样,有这个问题,所以我无法投票,因为“投赞成票需要15个声誉”哈哈。你的答案几乎完美,所以我会投赞成票。你的代码不包括36哈哈lol@void因为这与作者版本中的相同。
arr
将作为窗口属性。@void这是使用
var arr=[]
。这没有。如果你打开这两个版本,你可以看到你得到的
arr
在函数
factor
之外。这是不正确的。@john chau这不是正确的答案。你看到我的评论了吗?