收录日期:2020/09/27 00:10:19 时间: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的父节点,这样来完成对一棵树的遍历。最终还是会退出的

想实现那么一个功能,请问应该如何做啊? 想在程序界面上实现一个功能,当添加一个目录时,下面的全部文件均被选中,请问该如何实现? 创建远程消息队列的问题,高手快来救火!!元旦之前解决的!! 请教一个在没有保存文档的前提下,通过查询把要的内容显示在表单的FIELD中?具体描述请进来看~ 服务器管理器不能启动. 有没有办法用代码模拟用户鼠标点击事件? 散分:新年天气预报:元旦前后大面积会下钞票,东北华北美钞,西北卢布,华中华南英钞,东南地区有支票 求以下两个API的详细的参数,以达到GBK转成UTF-8及BIG5码功能 resultSet是只读的,如何将它变成可写的? 新年,散分 祝大家新年如鱼得水,鱼目混珠,尔鱼我炸,鱼无伦次,祝大家新年快乐年年有余! Split函数出错了,请大虾们解释解释 一个简单的面试题 符号编辑器 发送邮件的问题! resultSet是只读的,如何将它变成可写的? 52/47软设通过,散分,顺便通知大家北京可以查分了! 疑难杂症!!! eclipse + myEclipse+tomcat 启动问题 祝大家新年快乐,阖家幸福 VC SDK如何转化成delphi问题 请教一个很棘手的问题 单文档的问题 祝福新的一年中大家的生活美满幸福。散分 【想在2006年旺的、发的都进来吧】 新年来临,送大家好心情,散分哦! ghost后 winxp后无法自动关机,如何修复? EXCEL高手过来 感情问题--寻建议 临时文件