收录日期:2020/01/29 14:09:17 时间:2016/05/18 02:53:07 标签:C语言
谁能给我讲讲递归调用的全过程(一个递归还能差不多明白但两个不太明白了)
例如以下两个函数:
TreeNode<T>*find(TreeNode<T>* b,T x)
{
TreeNode<T>*p;
if(b==NULL)
return NULL;
else if(b->data==x)
return b;
else
{
p=find(b->Left(),x);
if(p!=NULL)
return p;
else 
return find(b->Right(),x);
}
}
int treedepth(TreeNode<T>*b)
{
int leftdep,rightdep;
if(b==NULL)
return 0;
else
{
leftdep=treedepth(b->Left());
rightdep=treedepth(b->Right());
if(leftdep>rightdep)
return (leftdep+1);
else
return (rightdep+1);
}
}

这个是二叉树遍历问题呀,第一个
TreeNode<T>*find(TreeNode<T>* b,T x)//查找等于X的结点
{
TreeNode<T>*p;
if(b==NULL)                
return NULL;
else if(b->data==x)//如果b->data是X是就返回   
return b;
else
{
p=find(b->Left(),x);//否则到他的左子树查找
if(p!=NULL)
return p;//左子树为空的情况
else 
return find(b->Right(),x);//否则指向右子树
}
}
以下那个程序差不多,我是这样认为的
我讲的可能不是太明白,你自己在理解一下吧!
谢谢 windything(风物语)


但是还不明白它的具体过程。我们老师讲:回搠一类的东西。


能不能再详细点
递归的实质很简单,就是函数自身调用自身。
而所谓的“回溯”实际上就是指各层递归的退出,也就是函数的退出。递归在内存是通过栈来实现的,因此越晚(即越往内层)的调用退出(即回溯)越早。
up
谢谢大家

请问
leftdep=treedepth(b->Left());
rightdep=treedepth(b->Right());
这两个递贵调用

当leftdep=treedepth(b->Left());执行递归调用时
rightdep=treedepth(b->Right());也跟着执行吗?
还是等到回朔时执行,但如果它回朔了,不又调用leftdep=treedepth(b->Left());了吗

岂不是死循环了??

实在是搞不懂呀?!!!


清高手指点!!!

5555555

高手进来呀
不会有死循环,因为当
if(b==NULL)
return 0;
也就时当2叉树到叶节点时函数开始回溯,一层一层退回去,所以不会有死循环

===================
当leftdep=treedepth(b->Left());执行递归调用时
rightdep=treedepth(b->Right());也跟着执行吗?
还是等到回朔时执行,但如果它回朔了,不又调用leftdep=treedepth(b->Left());了吗
======================
你再仔细看看,当回溯时leftdep=treedepth(b->Left())已经调用完了,说明树根为b节点的树的左子树已经遍历完了,该轮到表里右子树rightdep=treedepth(b->Right())了,当这个函数调用完,说明右子树遍历完了,这时执行完接下去的语句后,就回溯到上一层,即是节点b的父节点,这样来完成对一棵树的遍历。最终还是会退出的

广度优先搜索是怎么搞的? 不是偷懒,是真的不会!!!! 请问哪有Mapinfor7。0的算号器 或注册文件 远程控制的问题,很棘手,再线等待 关于datatime类型变量的相加问题 为什么我的设备实现不了在线直播!!非常急!!!!!! 关于判断时间的问题,会的指点下哦~~ 请is打包高手指点一下,就是用installshield developer给asp打包的问题。急用!!!请帮忙 云中谁寄锦书来! 网页色彩的搭配 WORD中的OLE对象如何取出的问题,急待高手支援! 请高手解决,加急! 一个让我无法理解的问题! 一个软件公司应该有什么样得规章制度 怎样通过ip地址获得netbios名称 jbuilder8自带的tomcat在调试过程中忽略server.xml,临时生成server8080.xml,如何使得tomcat服务器用原来的server.xml而不用临时的serve 如何将参数传递到Synchronize(fun)中的 fun去; C#,winform中的dataGrid,我怎样实现在第一列离开的时候,监测我的数据的有效性? 三个极其简单的问题,回答立即给分! 如何把传真文件放到指定Exchange信箱中 学习ASP.net,一定要会HTML吗? 如何让TextBox不可输入,但能够显示超过其长度的字符串? 在vf中选择性更新如何实现啊? 在线等待!求救!!WINXP启动不了。大侠请进! Data Report问题 我的2000pro得了什么病啦? 請問如何讀出資源中的設備無關位圖 放分对象:了解ERP、MRP 一款新颖的《CMS机房计费管理》软件免费下载使用 help !!!!