正文

[074] 字符串逆序输出(递归)2006-11-19 22:18:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/20500.html

分享到:

《C程序设计》(夏宝岚)



[相关]  [053] 字符串逆序输出 。

编写递归函数,实现将输入的字符串以倒序输出。


#include <stdio.h>
void revers()
{
    char c;
    if((c = getchar()) != '\n')
        revers();
    if(c != '\n')
        putchar(c);
}

void main()
{
    revers();
    printf("\n");
}

运行结果(VC):
=================
I am a student↙
tneduts a ma I
=================

★ 仔细“品”一下这个题目会发现很意思,特别是对理解递归的执行流程很有帮助(随便找一本C语言的书,都会找到执行流程的示意图)。不容易理解的就是那句putchar(c); 乍一看好像是输入回车后只会把最后的一个字符(即回车符)输出,而做了c!='\n'的限制后就应该什么都不输出才对,其实这正是递归的实质所在。

递归在编译系统里是通过堆栈来实现的,即如果函数当前层不满足结束条件,就会再次调用其本身,在调用之前,编译系统会为函数代码、形参以及函数中定义的局部变量在堆栈中分配单元,即将这些信息暂时存储起来,下一层函数若仍不满足结束条件,则重复此过程,继续将信息存储在系统堆栈中。在本题中,每一层输入的字符都已经存储在了堆栈中。当满足结束条件时,从最后层堆栈开始回归,一层层的返回。此题中从最后输入的回车符开始返回,完成了逆序将堆栈中存储的字符输出。

可能某些用词并不准确,不过我想我的理解应该没错^_^

阅读(8590) | 评论(7)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...

发表评论

评论内容:(字数请控制在500字以内)