1
私は、クォードツリーを通して実行され、各ノードに対してキーを生成する再帰関数を持っています。しかし、これは変数myKey
をmyKey1
として保存した場合にのみ機能します。私がそれをしなければ、その結果の鍵は間違っています。しかし、なぜ?それは私には分かりません。ここでパラメータを保存せずに再帰関数が機能しない
は関数である。
void keygen(tree *tn, long unsigned int myKey)
{
long unsigned int myKey1 = myKey; // Why do I need this line?
for(int q=0; q<4; q++){
// 1) Check if child exists
if(tn->child[q] != NULL){
// Make key
myKey1 = (myKey<<DIM)|q;
// Save key
tn->child[q]->key = myKey1;
// Call again if leaf
if(tn -> child[q] -> isLeaf == 0){
keygen(tn->child[q], myKey1);
}
}
}
}
'myKey1 =(myKey << DIM)| q;'行のために?もともとmyKeyを左右に使用していた場合は、ループの繰り返しごとにシフトが累積されます。 – happydave
@happydave:これを答えにしてみませんか? – alk
@happydaveはい、今は見ます。あなたはまったく正しい!ありがとうございました! – Samuel