免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8649 | 回复: 12
打印 上一主题 下一主题

[C++] 怎么样跳出递归,返回一个值?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-04 10:07 |只看该作者 |倒序浏览
本人初学,写了一个递归函数,目的是从map中查找code,返回该节点的指针node*,(map是一个多叉树型结构)
下面就是程序,可是发现每当return 返回时,它是返回到for()循环里的find_node(), 而不是返回主函数
,小弟想不到解决方法,望大家指点,非常感谢
node *find_node(node *cur,int code)
{
        map<int, node*>::iterator it;
        map<int, node*>::iterator iter;
        node *child;

        if(cur == NULL)
                return NULL;

        iter = cur->child_node.find(map<int, node*>::key_type(code));
        if(iter == cur->child_node.end())
        {
                for(it=cur->child_node.begin();it!=cur->child_node.end();it++)
                {
                        child = it->second;
                                               find_node(child,code);
                }
        }
        else
        {
                child = iter->second;
                return child;
        }
        return NULL;
}

论坛徽章:
0
2 [报告]
发表于 2008-06-04 10:13 |只看该作者
return find_node(child,code); 可以不?

论坛徽章:
0
3 [报告]
发表于 2008-06-04 10:15 |只看该作者
不好意思,还有一个疑问,我上面写的代码好像不是把全部节点遍历,是不是哪里有问题?

定义的结构体如下
struct node
{
int unichar;
map <int, node*> child_node;
int flag;
};

论坛徽章:
0
4 [报告]
发表于 2008-06-04 10:18 |只看该作者
没看你的代码


只是从理论上给你解释下。

能否跳出递归,跟你的算法有很大关系

关键看函数是否能够做到收敛

只有收敛函数,才能跳出递归

论坛徽章:
0
5 [报告]
发表于 2008-06-04 10:19 |只看该作者
同意四楼的。

论坛徽章:
0
6 [报告]
发表于 2008-06-04 10:26 |只看该作者

回复 #4 net_robber 的帖子

小弟是新手,什么才算函数是否能够做到收敛??

论坛徽章:
0
7 [报告]
发表于 2008-06-04 10:30 |只看该作者
还有一个疑问,我上面写的代码好像不是把全部节点遍历,是不是哪里有问题?

定义的结构体如下
struct node
{
int unichar;
map <int, node*> child_node;
int flag;
};


个疑问好像就是假如map中有如下

                                root

              我                            她
            的      家                是
    爱                            爱        谁
                              人


现在我要查找“爱”这个词,可是里面有多个“爱”,我上面程序好像就是找到一个就把它返回了,可是我想把两个都找到,那该怎么办??
各位高人指点下

论坛徽章:
0
8 [报告]
发表于 2008-06-04 10:36 |只看该作者
想两个都找到再返回。。。。。那就不需要返回了。

选择一个数组,记录找到的节点集,然后遍历就是了,这种情况是不需要中途返回的,

论坛徽章:
0
9 [报告]
发表于 2008-06-04 10:38 |只看该作者

回复 #8 5毛党党员 的帖子

你的意思是说,把找到的节点,放到一个数组中吗?

论坛徽章:
0
10 [报告]
发表于 2008-06-04 10:46 |只看该作者
收敛是一个数学概念,

具体的请复习高等数学课本
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP