c - C中的递归有什么问题

标签 c recursion

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

有人说我应该在调用函数本身时返回该函数。
它确实有效,但我不明白为什么。有人可以向我解释
递归是如何工作的以及如果返回类型为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;
}

最佳答案

您错过了返回递归调用的值

如果您需要进行递归调用,这并非没有意义;-)

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);
    }
}

请注意,由于递归是终端,编译器可以将其删除并生成循环......您也可以自己执行此操作;-)

关于c - C中的递归有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55497769/

相关文章:

c - 为什么要销毁 pthread_cond_t 和 pthread_mutex_t?

c - Linux :Identifying pages in memory

objective-c - gcc编译错误: passing argument to parameter here

algorithm - 混合函数的增长顺序

python - Scrapy: 递归爬取生成 DEBUG: Crawled (200) 并且没有项目输出

将由符号分隔的单词计为两个单词

c - 字节数组的 itoa 函数

c++ - 如何编写将二进制数转换为十进制数的递归函数?

java - 递归地找到一个集合中最强大的

recursion - Prolog 累加器。它们真的是 "different"概念吗?