我有一个递归函数,它在四叉树中运行,为每个节点生成一个键。但这只在我将变量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;
如果不生成单独的myKey1变量,那么在循环的每次迭代中都将按DIM进行移位,因此到第四次迭代时,将按4*DIM进行移位(并在移位之间按不同的q值进行位运算)。
似乎您的目的只是相对于原始键进行移位或一次移位,这是通过创建新变量而不是就地修改原始myKey来实现的。