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