《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'的限制后就应该什么都不输出才对,其实这正是递归的实质所在。
递归在编译系统里是通过堆栈来实现的,即如果函数当前层不满足结束条件,就会再次调用其本身,在调用之前,编译系统会为函数代码、形参以及函数中定义的局部变量在堆栈中分配单元,即将这些信息暂时存储起来,下一层函数若仍不满足结束条件,则重复此过程,继续将信息存储在系统堆栈中。在本题中,每一层输入的字符都已经存储在了堆栈中。当满足结束条件时,从最后层堆栈开始回归,一层层的返回。此题中从最后输入的回车符开始返回,完成了逆序将堆栈中存储的字符输出。
可能某些用词并不准确,不过我想我的理解应该没错^_^
评论