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

标签 javascript python recursion

我正在尝试移植在这里看到的算法 https://ideone.com/26G1fB (用 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

我是这么想的:

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]

这里是一个 jsfiddle https://jsfiddle.net/9umgwhoa/

这似乎是 js 对 python 进行递归调用的方式,但我无法弄清楚是什么。

如果能指出这两个代码之间的区别,我们将不胜感激

最佳答案

基本上你需要一个局部变量i。无需创建全局变量,任何循环都会在不考虑局部范围的情况下递增变量。

var bracketize = function (arr, depth, m) {
    if (complements.length <= depth) {
        complements.push(2 ** (depth + 2) + 1)
    }
    var complement = complements[depth],
        i;

    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,
    arr = [1, 2],
    complements = [];

bracketize(arr, 0, m);

console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 递归函数调用如何在javascript中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47038771/

相关文章:

c - 在c中使用递归的strlen函数

javascript - Angular ui-router 中的绝对名称

javascript - promise 是不可变的及其保证值(value)是什么意思?

javascript - 如何实现sizzle的:gt filter in vanilla javascript

python - Pandas 数据框转置原始行和列值

Javascript promise 递归和链接

javascript - 带有附件的 Office.context.mailbox.item.displayReplyAllForm 不工作 outlook.live.com 和 outlook api 给出内部服务器错误

python - 这是用 Python 编写 POST 函数的正确方法吗?

python - 使用请求在python中下载大文件

c - 两个代码片段有什么区别?