| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2616 人关注过本帖
标题:求助大佬,帮我看下我的递归函数哪里错了
只看楼主 加入收藏
丶随风飘扬
Rank: 2
等 级:论坛游民
帖 子:38
专家分:20
注 册:2019-11-1
收藏
得分:0 
回复 9楼 rjsp
大佬,你程序的思路应该是先对中点进行判断,若不是要找的数,再对左半部分进行查找,再找不到,最后对右半部进行查找。
可是如果没有要找的那个数的话,你程序里并没有对这个情况进行判断并返回-1。
还有index什么时候会等于-1?毕竟你函数里并没有return -1呀。
2019-11-05 15:01
丶随风飘扬
Rank: 2
等 级:论坛游民
帖 子:38
专家分:20
注 册:2019-11-1
收藏
得分:0 
回复 9楼 rjsp
这是我根据你的提示写的代码,我自己试了一下,设了数组a有五个数1 5 6 9 3。要查找9的下标,当9的下标是0,1,2的时候就能找到,9的下标是4,5的时候就找不到,也不会返回-1.
程序代码:
int findx4(int a[],int n,int x)
{
    if(a[n/2]==x)
        return n/2;
    size_t index = findx4(a,n/2,x);
    if(index!=-1)
        return index;
    return findx4(a+n/2+1,n-n/2-1,x);
}

2019-11-05 15:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 10楼 丶随风飘扬
你要将源码贴全
conflicting types for 'findx3' 的意思是你在其它地方声明了一个同名的函数 findx3,但函数原型却不一样。
2019-11-05 15:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 11楼 丶随风飘扬
只是一个简单的为代码而已,一开始的 if( 数组长度 == 0 ) return -1; 省略了
2019-11-05 15:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 12楼 丶随风飘扬
应该这么改,虽然挺丑的

程序代码:
size_t findx4( const int a[], size_t n, int key )
{
    if( n == 0 )
        return -1;

    if( key < a[n/2] )
        return findx4( a, n/2, key );

    if( a[n/2] < key  )
    {
        size_t index = findx4( a+n/2+1, n-n/2-1, key );
        if( index != -1 )
            index += n/2+1;
        return index;
    }

    return n/2;
}

2019-11-05 15:27
快速回复:求助大佬,帮我看下我的递归函数哪里错了
数据加载中...
 
   



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

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