Что не так с рекурсией в C - PullRequest
       3

Что не так с рекурсией в C

0 голосов
/ 03 апреля 2019

Я попытался найти узел дерева с определенным значением в двоичном дереве поиска.
Я использовал рекурсию, но она не сработала.
Я хочу знать, что не так с функцией.

Кто-то сказал, что я должен вернуть функцию, когда я вызываю ее сама по себе.
Это действительно сработало, но я не понимаю почему. Может кто-нибудь объяснить мне, как
рекурсия действительно работает и что, если тип возвращаемого значения 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;
}

1 Ответ

1 голос
/ 03 апреля 2019

вы пропустили, чтобы вернуть значение рекурсивного вызова

если вам нужно сделать рекурсивный вызов, это не зря; -)

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

Обратите внимание: поскольку рекурсия - это терминал , компилятор может удалить ее и создать цикл ... и вы тоже можете это сделать самостоятельно; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...