| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 427 人关注过本帖
标题:这个问题谁懂的在帮我看看.
只看楼主 加入收藏
qztr28
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2010-12-2
结帖率:40%
收藏
已结贴  问题点数:10 回复次数:6 
这个问题谁懂的在帮我看看.
为什么这个程序输入一个字符串后,它会反序打印出来呢?请帮我详解一下...谢谢
#include<stdio.h>
#include<ctype.h>

main()
{
    char s[80];
    void re(char *);

    gets(s);
    re(s);
}
void re(char *s1){
    if(*s1=='\0')
           return;
    else{
        re(s1+1);
        putchar(*s1);
    }
}
2010-12-13 09:02
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<ctype.h>
void main()
{
    char s[80];//字符数组
    void re(char *);//函数声明 参数为字符串的地址
    gets(s);//获取字符串
    re(s);//倒置输出字符串 
}
void re(char *s1){
    if(*s1=='\0')   //如果字符串为空  '\0'为字符串结束标志  编译系统会自动加上
           return;//函数提前返回
    else{
        re(s1+1);//递归调用  来判断当前字符的下一个字符是不是'\0'
        putchar(*s1);//当某一次调用满足*s1=='\0'  就会返回到上一层调用  执行上一层的putchar(*s1);
                     //上一层返回到上一层.........这样一直返回时逆序返回  也就实现了逆序输出
    }
}
帮你谢了注释

                                         
===========深入<----------------->浅出============
2010-12-13 09:45
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:10 
程序代码:
#include<stdio.h>
#include<ctype.h>

main()
{
    char s[80];
    void re(char *);

    gets(s);
    re(s);
}
void re(char *s1){
    if(*s1=='\0')
           return;
    else{
        re(s1+1);/*问题在这里,你的re递归调用了,当*s1=='\0'不满足时,就会走else
                  而else里面又会调用re,如是有回到判断if是否成立,如此直到字符串
                  的结尾。这时就会从字符串结尾开始往回打印字符串了*/
        putchar(*s1);
    }
}
2010-12-13 09:55
qztr28
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2010-12-2
收藏
得分:0 
我不明白..为什么*s1=='\0'时..这个递归不就结速了吗..怎么还会执行最后那个putchar(*s1)呢??
2010-12-13 09:55
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
*s1=='\0'  这个条件是递归的结束  但是递归结束了之后
还要一层一层的向调用点 返回  执行返回层调用后面的东西  再返回上一层

                                         
===========深入<----------------->浅出============
2010-12-13 10:08
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:0 
回复 4楼 qztr28
当*s1==0时,执行return,这个return是返回到最后一次调用re这个函数的地方,及else里面的re(s1+1),
并执行后面的putchar()。5楼讲的很好,LZ可以好好理解一下啊,动手画画图吧,那样更容易理解
2010-12-13 10:17
qztr28
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2010-12-2
收藏
得分:0 
谢谢.我理解了..
2010-12-13 10:20
快速回复:这个问题谁懂的在帮我看看.
数据加载中...
 
   



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

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