还想问一下 你们写程序的时候 直接就在vc上 写吗
还是 先在纸上划一划
能不能 介绍一下经验
我是个 大二的 初学者
递归就是栈。借用一下楼上的程序
if(!b){return NULL;}
else
{
if(b->data==x)
return b; //递归出口
else
{
FindNode(b->lchild,x);
FindNode(b->rchild,x);
}
}
以上程序,return b就是递归出口
注意,当你return的时候,并不是立刻离开程序
要注意,递归就是栈,当你findNode(b->lchild,x)的时候就代表入栈一次。
我举个例子, 例如你调用一次 FindNode(b->lchild,x);当你找到想要找的元素之后,return b(这个时候就是退栈) 程序会返回到FindNode(b->lchild,x),接着会调用FindNode(b->rchild,x);直到b==NULL;当b==NULL的时候就开始退栈了。退栈的过程是很复杂的过程,因为程序要记住你入栈地方。以便可以执行之后的语句。反正递归不是可以用语句解释清楚的。只能靠多实践。当时递归都是我自己领悟的,老师都没有讲过,数据结构直接跳过递归那章,我怀疑教我那个老师根本不会的。
呵呵,我都还不怎么清楚数据结构包含哪些东西,哎~
BTNode* FindNode(BTNode *b,ElemType x)//找到值为x的节点并返回
{
if(!b)//如果b不存在
{
return NULL; //返回未找到,并且跳出函数
}
else //否则(b存在的情况)
{
if(b->data==x) //如果找到了
{
return b; //返回b的地址,并且跳出函数
}
else //否则(继续查找)
{
FindNode(b->lchild,x);//用函数FindNode()遍历b的左子树(用同样方法,这句就是递归了)
FindNode(b->rchild,x);//用函数FindNode()遍历b的右子树 这句也是递归
}
}
}
请问当我找到了一个结点x后,用return返回时,是退出了整个函数,还是结束了本次递归调用?
你这个函数能找多个值为x的结点吗?