| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1357 人关注过本帖
标题:[求助]关于递归我有些不明白
只看楼主 加入收藏
asdffdsa
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-5-25
收藏
 问题点数:0 回复次数:22 
[求助]关于递归我有些不明白
由谁能给我讲讲递归算法啊
我总是弄不明白
比如说二茶树建立。。。
我能看懂那些程序 可是要是让我自己写的话
却总是出现错误
找不到方法啊
搜索更多相关主题的帖子: 递归 
2006-05-28 14:59
asdffdsa
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-5-25
收藏
得分:0 

BTNode* FindNode(BTNode *b,ElemType x)//找到值为x的节点并返回
{


if(!b)
{
return NULL;
}
else
{

if(b->data==x)
{
return b;
}
else
{
FindNode(b->lchild,x);
FindNode(b->rchild,x); }
}

}



这个程序是我自己写的 可是 他是个错误的 忘了说了 对不起大家阿
能不能告诉我为什么错了阿
这个程序对我打击很大阿

[此贴子已经被作者于2006-5-30 17:31:37编辑过]

2006-05-28 15:02
asdffdsa
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-5-25
收藏
得分:0 
没有人给我讲讲吗
我明天再来看看
谢谢各位了
2006-05-28 15:43
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 

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的右子树 这句也是递归
}
}

}

一般情况下,在函数f()中调用它本身的话,函数f()就是个递归函数.注意递归函数一定要有跳出函数的条件,否则就成了死循环了.


我的征途是星辰大海
2006-05-28 16:16
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 

SunShining写的程序中的一段,建立二叉树的递归函数,借来用用

struct btnode *creatbt(struct btnode *bt,int k) //以bt为双亲建立子树
{
struct btnode *p,*t;
int x;
scanf("%d",&x);//x=0的时候结点不存在
if(x!=0) //如果结点存在
{
p=(struct btnode *)malloc(sizeof(struct btnode));
p->data=x;p->rflag=0;
p->lchild=p->rchild=NULL;

if(k==0) t=bt=p; //这个结点是根结点
if(k==1) bt->lchild=p; //这个结点p是结点bt的左子树
if(k==2) bt->rchild=p; //这个结点p是结点bt的右子树

creatbt(p,1); //以p为双亲建立p的左子树(调用自身,递归)
creatbt(p,2); //以p为双亲建立p的右子树(调用自身,递归)
}
return(t);//x=0时,结点不存在,返回t,跳出函数,结束递归的条件
}


我的征途是星辰大海
2006-05-28 19:18
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
我也说下吧
第归算法其实就是个if语句。在写算法前,先找到一个“公式”或者是一种规律。(以4楼的为例)
一、第归结束的条件。如 if(!b){return NULL;}

二、一般规律。也就是 if(b)则……,在这里是:
else
{
if(b->data==x)
return b;
else
{
FindNode(b->lchild,x);
FindNode(b->rchild,x);
}
}
做到这里就要看题目的要求是什么了,这里是找值为x的节点,那在else中 继续判断是不是b->data==x,如果等于则返回此节点,结束一次第归,如果不等,则继续按照“公式”或规律确定下一次第归的参数,这里是b->lchild和b->rchild。
至于其它的第归算法,与此相似!

2006-05-28 20:59
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 

我的征途是星辰大海
2006-05-28 21:15
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用starrysky在2006-5-28 21:15:00的发言:

,不敢当啊,这也是我老师总结的


2006-05-28 21:18
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
你能用在这里不就说明这已经是你的了吗?

我的征途是星辰大海
2006-05-28 21:21
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
呵呵,是啊,不能再说了,要不然又要成水帖了

2006-05-28 21:31
快速回复:[求助]关于递归我有些不明白
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036331 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved