| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 463 人关注过本帖
标题:我用递归写了一个双分支的函数,但实际上只需得到一个 return 值即可,不需 ...
只看楼主 加入收藏
windthenrain
Rank: 2
等 级:论坛游民
帖 子:21
专家分:15
注 册:2014-10-27
结帖率:100%
收藏
 问题点数:0 回复次数:4 
我用递归写了一个双分支的函数,但实际上只需得到一个 return 值即可,不需要执行另一条,求教如何实现
#include<stdio.h>
#include<string.h>
int compare(char *a,char*b)
{
    if(!strcmp(a,b))  return 0;
    int i,flag=0,k;
    for(i=0;i<(strlen(a)<strlen(b)?strlen(a):strlen(b));i++)
    {
        if(a[i]>b[i])
        {   k=0;flag=1;return k;}
        if(a[i]<b[i])
        {   k=1;flag=1;return k;}
    }
    if(flag!=1)                            //(这里出了问题)得到我的目的后,可它又执行了|
    {                                                                                |  
        if(strlen(a)>strlen(b))      《-----比如说我只要执行                       /                                                
        {                                                                        /
            for(i=0;i<strlen(b);i++)                                          /
                a[i]=a[i+strlen(b)];                                        /
            compare(a,b);                                                /
        }                                                              /
       if(strlen(a)<strlen(b))     《- - - - - - - - - - -- - - -- - /
        {
            for(i=0;i<strlen(a);i++)
                b[i]=b[i+strlen(b)];
            compare(a,b);
        }
    }
}


void sort(char a[][20],int N)
{
    int s,i,j,k;

    for(i=0;i<N;i++)
    {
        char b[100]="",str1[100]="";
        k=i;
        strcpy(str1,a[k]);
        for(j=i+1;j<N;j++)
        {
            char str2[100]="";
            strcpy(str2,a[j]);
            if(compare(str1,str2))

            {    k=j;
                 strcpy(str1,a[k]);
            }

        }


        if(k!=i)
        {
            strcpy(b,a[i]);
            strcpy(a[i],a[k]);
            strcpy(a[k],b);
        }
    }
}
int main()
{
    //freopen("a.txt","r",stdin);
    int N;
    while(scanf("%d",&N)!=EOF)
    {
        if(N==0) break;
        char a[20][20]={};
        getchar();
        int i,j;
        for(i=0;i<N;i++)
        {
            j=0;
            while(1)
            {
                scanf("%c",&a[i][j]);
                if(a[i][j]==' '||a[i][j]=='\n')
                   break;
                j++;
            }
            a[i][j]='\0';
        }


        sort(a,N);


        for(i=0;i<N;i++)
           puts(a[i]);
           // printf("%s",a[i]);
        printf("\n");
    }
    return 0;
}

推荐测试数据:3
321 32 3




[ 本帖最后由 windthenrain 于 2014-12-6 19:05 编辑 ]
搜索更多相关主题的帖子: 如何 return include compare 
2014-12-06 19:04
ffbh
Rank: 2
等 级:论坛游民
威 望:1
帖 子:27
专家分:10
注 册:2015-1-15
收藏
得分:0 
加个continue试试?
2015-01-16 13:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
解决你的需求并不难,用else或标识变量、switch均可。但你的代码设计显然不科学,两段代码的动作完全一样的,只是条件不同而已,就不该重复出现,也就是说,本来是不存在这种问题的,是你自己代码组织不当造成的。

授人以渔,不授人以鱼。
2015-01-16 13:56
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:0 
if else 这么好的判断语句你不用  为啥将所有的代码都去判断执行呢?不仅加大工作量,也不符合代码设计。出现问题也不好查找。

授人以鱼,不如授人以渔
2015-01-16 14:23
windthenrain
Rank: 2
等 级:论坛游民
帖 子:21
专家分:15
注 册:2014-10-27
收藏
得分:0 
thank you ,
刚开始练想法有点水啊,后来自己也想到了
但还是很感谢大大们
2015-02-10 19:05
快速回复:我用递归写了一个双分支的函数,但实际上只需得到一个 return 值即可, ...
数据加载中...
 
   



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

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