Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的递归有什么问题_C_Recursion - Fatal编程技术网

C中的递归有什么问题

C中的递归有什么问题,c,recursion,C,Recursion,我尝试在二叉搜索树中使用特定值搜索树节点。 所以我使用了递归,但效果不好 我想知道这个函数有什么问题 有人说我应该在自己调用函数时返回它。 它确实起作用了,但我不明白为什么。有人能给我解释一下递归是如何工作的吗?如果返回类型是void怎么办? 谢谢大家! typedef struct node { struct node* left; struct node* right; int val; }treeNode; int searchTree(treeNode *T, i

我尝试在二叉搜索树中使用特定值搜索树节点。
所以我使用了递归,但效果不好
我想知道这个函数有什么问题

有人说我应该在自己调用函数时返回它。
它确实起作用了,但我不明白为什么。有人能给我解释一下递归是如何工作的吗?如果返回类型是void怎么办? 谢谢大家!

typedef struct node
{
    struct node* left;
    struct node* right;
    int val;
}treeNode;
int searchTree(treeNode *T, int key, treeNode *T1, treeNode** p)
{
    if(!T)
    {
        *p=T1;
        return 0;
    }
    else if(T->val==key)
    {
        *p=T;
        return 1;
    }
    else if(T->val<key)
    {
        searchTree(T->right,key,T,p);
    }
    else
    {
        searchTree(T->left,key,T,p);
    }
    return 1;
}
typedef结构节点
{
结构节点*左;
结构节点*右;
int-val;
}三烯醇;
int searchTree(treeNode*T,int key,treeNode*T1,treeNode**p)
{
如果(!T)
{
*p=T1;
返回0;
}
否则如果(T->val==键)
{
*p=T;
返回1;
}
else if(T->valright,key,T,p);
}
其他的
{
搜索树(T->left,key,T,p);
}
返回1;
}

您没有返回递归调用的值

如果您需要执行递归调用,这并非毫无意义;-)

int-searchTree(treeNode*T,int-key,treeNode*T1,treeNode**p)
{
如果(!T)
{
*p=T1;
返回0;
}
否则如果(T->val==键)
{
*p=T;
返回1;
}
else if(T->valright,key,T,p);
}
其他的
{
返回搜索树(T->left,key,T,p);
}
}

请注意,由于递归是终端,编译器可以删除它并生成循环…您也可以自己完成;-)

“它工作不好”确切地说是什么意思?对于子搜索,你不应该
返回1
,而应该是
搜索树
返回的内部调用。“它工作不好”意味着当我使用搜索树插入带有for循环的数组时,只插入数组的第一个元素。您没有使用SearchTree的返回值。您能解释一下为什么我应该使用SearchTree的返回值吗?您好,Liu,再次;-)这取决于具体情况,这里它只是一个int,因此可以在寄存器中返回值,否则它在堆栈中。我们有一个聊天链接
int searchTree(treeNode *T, int key, treeNode *T1, treeNode** p)
{
    if(!T)
    {
        *p=T1;
        return 0;
    }
    else if(T->val==key)
    {
        *p=T;
        return 1;
    }
    else if(T->val<key)
    {
        return searchTree(T->right,key,T,p);
    }
    else
    {
        return searchTree(T->left,key,T,p);
    }
}