| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 624 人关注过本帖
标题:一个很经典的题目,却不知怎么反着
只看楼主 加入收藏
hsbwp1314
Rank: 2
来 自:湖南长沙
等 级:论坛游民
帖 子:88
专家分:25
注 册:2008-12-1
结帖率:53.85%
收藏
 问题点数:0 回复次数:7 
一个很经典的题目,却不知怎么反着
【程序27】
题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
1.程序分析:
2.程序源代码:
#include "stdio.h"
main()
{
int i=5;
void palin(int n);
printf("\40:");
palin(i);
printf("\n");
}
void palin(n)
int n;
{
char next;
if(n<=1)
 {
 next=getchar();
 printf("\n\0:");
 putchar(next);
 }
else
 {
 next=getchar();
 palin(n-1);
 putchar(next);
 }
}


请各位指教,看不懂是怎么反着输出的,请详细指点!
 当N=2时,我能理解其反向输出的数字,但是那N>2那些输入进来的数,却不能理解其是怎么反着输出来的
搜索更多相关主题的帖子: 经典 
2008-12-01 18:04
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
#include <stdio.h>
int main(void) {
        char  ch ;
         if ( (ch = getchar() )== '\n')
             return 0 ;
         else {
                main() ;
               putchar(ch) ;
            
         }
}

without further ado, let’s get started
2008-12-02 19:30
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
楼上的程序很好,我也来一个。
程序代码:
#include <stdio.h>
void dg(int i)
{
    char ch;
    if(i>=1)
    {
        ch=getchar();
        dg(i-1);
    }
    else    return ;
    putchar(ch);
}
int main(void)
{
    dg(5);
    return 0;
}
2008-12-02 19:55
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册:2007-12-27
收藏
得分:0 
回复 楼主 hsbwp1314 的帖子
啥叫递归?
递归就是说你可以只明白一个问题,把其它问题留着下次解决。
所以既然用了递归,明白n=2就够了。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-12-02 20:44
dubukuangye
Rank: 1
等 级:新手上路
威 望:2
帖 子:155
专家分:3
注 册:2008-11-11
收藏
得分:0 
顶!函数递归我还没有完全吃透阿,真正掌握有点困难啊!!!!!

与其离开她为了过的更好,不如抓住她,自己努力让她过的更好
2008-12-02 20:55
hsbwp1314
Rank: 2
来 自:湖南长沙
等 级:论坛游民
帖 子:88
专家分:25
注 册:2008-12-1
收藏
得分:0 
谢谢forever74
谢谢你的提醒,原理是你这样的,我个人认为要做到你这样,一定要在对这个算法完全理解的基础上,比如说吧!我能理解他怎么一级一级地往下调动,但却不明白他怎么反回来输出!认为再之调用后next被赋予了新的值,
  如输入ABCDE五个字母,n=5,next=A  再次调用后,next=B.从新调用当n=3时,next=C,到n=2时,next =D时,
 if(n<=1)
 { next=E=getchar();
 printf("\n\0:");
 E=putchar(next);}

 
 else
  {
   next=D=getchar();
 palin((2-1)==1);
 D=putchar(next);
}

输出:D和E
我是这样理解的,不晓得怎么反回去输出CBA
我想我这样分析可能错了,请你指点...........
2008-12-03 19:20
hsbwp1314
Rank: 2
来 自:湖南长沙
等 级:论坛游民
帖 子:88
专家分:25
注 册:2008-12-1
收藏
得分:0 
先执行else
 再反回去执行当N=1时,先输出E后,接着输出D,往后我就不知道怎么出来了..
2008-12-03 19:22
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:0 
2楼的程序真让人开眼界。 呵呵,我也加一个,凑个热闹。
#include <stdio.h>
//-----------------
void inv()
{
    char ch;
    ch=getchar();
    if(ch!='\n')
    {
        inv();
        putchar(ch);
    }
}
//------------------
void main(void)
{
    inv();
    putchar('\n');
}
2008-12-03 22:17
快速回复:一个很经典的题目,却不知怎么反着
数据加载中...
 
   



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

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