标题:看看这个代码有神马问题 感觉写的不对呢
只看楼主
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
结帖率:99.76%
已结贴  问题点数:100 回复次数:6 
看看这个代码有神马问题 感觉写的不对呢
代码功能:递归直接输出反转字符串

程序代码:
#include <stdio.h>

void output(char * a)
{
    if(*a=='\0') return;
    output(++a);
    printf("%c",*(a-1));
}

int main() 
{
    char * a="abcdefg";
    output(a);
    return 0;
}
搜索更多相关主题的帖子: 神马 字符串 
2016-02-29 10:15
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:34 
有什么问题吗,运行正常。

   唯实惟新 至诚致志
2016-02-29 10:40
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
运行当然正常了  否则我也不贴了

只是对这里的  printf("%c",*(a-1));  a-1 有些疑惑

DO IT YOURSELF !
2016-02-29 10:47
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:34 
这代码没问题,a-1是因为递归时是++a,已经改变a的值了,所以要输出当前a指向的值,必须a-1或printf("%c",*(--a))亦可,如果调用递归语句是output(a+1),则输出就是printf("%c",*a)了。

能编个毛线衣吗?
2016-02-29 10:56
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
得分:34 
学习下

[此贴子已经被作者于2016-2-29 11:00编辑过]

2016-02-29 10:59
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
得分:0 
开始运行的时候printf("%c",*(a-1))不执行,直到output递归结束后才反向执行。递归到最后到达'\0'位置时才结束,所以要退一位输出上一个字母'g',同理,到'g'位置时,退一位输出上一个字母'e'。这个只好意会不好言传,你再想想。

[此贴子已经被作者于2016-2-29 11:06编辑过]


   唯实惟新 至诚致志
2016-02-29 11:02
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
这递归很容易理解。递归的目的是首先找到字符串尾部,然后逆出。等效的循环代码如下:
        char * a="abcdefg",*p;
        p=a;
    for(;*a!='\0';++a);   //相当于递归进,到字符串尾部停止
    for(;a!=p;--a)printf("%c",*(a-1));  //相当于递归出,一直到返回主函数结束

能编个毛线衣吗?
2016-02-29 11:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-462018-1-1.html




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

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