2017-10-31 3 views
1

私はここに見られるalgorythmを移植しようとしていますhttps://ideone.com/26G1fB(Pythonで書かれています)はjavascriptに移植されています。javascriptで関数呼び出しrecusriveはどのように動作しますか

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対再帰呼び出しを行う方法で何かのように見えるが、私は何を把握することはできません。

2コードの嘘との違いは

+2

質問は何ですか? "任意のポインタ"はかなり広いです。 – evolutionxbox

+0

申し訳ありませんが、疑問があったはずです:実際の結果の代わりに私のコードから期待される結果を得るには?しかし、私が望むなら、もし可能ならば、なぜそれがうまくいかなかったのかを考えてください。 –

+0

ループのi宣言の中に 'var'が足りないだけでした – Lixus

答えて

2

をいただければ幸いです基本的にはローカル変数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; }

関連する問題