没有保存参数,递归函数不起作用

时间:2016-12-05 17:48:21

标签: c recursion

我有一个递归函数,它通过四叉树运行,并为每个节点生成一个键。但这仅在我将变量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);
            }
        }
    }   
}

1 个答案:

答案 0 :(得分:2)

这一行可能是问题

myKey1 = (myKey<<DIM)|q;

如果你没有制作一个单独的myKey1变量,那么你将在循环的每次迭代中通过DIM进行移位,因此在第四次迭代中,你将移动4 * DIM (并且在移位之间使用各种q值进行按位或运算)。

您的意图似乎只是移动和/或相对于原始键,这是您通过创建新变量而不是修改原始myKey来实现的。