递归函数调用在javascript中是如何工作的

递归函数调用在javascript中是如何工作的,javascript,python,recursion,Javascript,Python,Recursion,我正在尝试将这里看到的算法(用python编写)移植到javascript def divide(arr, depth, m): if len(complements) <= depth: complements.append(2 ** (depth + 2) + 1) complement = complements[depth] for i in range(2): if complement - arr[i] <= m:

我正在尝试将这里看到的算法(用python编写)移植到javascript

def divide(arr, depth, m):
    if len(complements) <= depth:
        complements.append(2 ** (depth + 2) + 1)
    complement = complements[depth]
    for i in range(2):
        if complement - arr[i] <= m:
            arr[i] = [arr[i], complement - arr[i]]
            divide(arr[i], depth + 1, m)

m = int(raw_input())

arr = [1, 2]
complements = []

divide(arr, 0, m)
print arr
def分割(arr,深度,m):

如果len(complements)基本上需要一个局部变量
i
。在不考虑局部范围的情况下,创建一个全局变量和任何循环增量变量

var bracketize=函数(arr,深度,m){

if(complements.length)问题是什么?“Any pointer”非常广泛。对不起,问题应该是:如何从我的代码中获得预期的结果而不是实际的结果?但是如果可能的话,我想知道它不能按原样工作的原因。您在循环中的i声明中只缺少了
var
var bracketize = function(arr, depth, m) {
  if (complements.length <= depth) {
    complements.push(2 ** (depth +2) + 1)
    }
    var complement = complements[depth]

  for ( i = 0; i < 2; i++ ) {   
    if (complement - arr[i] <= m) {
      arr[i] = [arr[i], complement - arr[i]]      
      bracketize(arr[i], depth + 1 , m)
    }
  }
}

var m = 16
var arr = [1, 2]
var complements = []

bracketize(arr, 0, m)

console.log(JSON.stringify(arr))

// expected result [[[[1, 16], [8, 9]], [[4, 13], [5, 12]]], [[[2, 15], [7, 10]], [[3, 14], [6, 11]]]]
// actual result : [[[[1,16],8],4],2]