一段实现字符串倒序的C代码

(yanlb2000, 2004.12.02)

先来看一段代码,很短。

#include

void MyRev(char* strIn)
{
if(strIn[1])MyRev(strIn+1);
putchar(strIn[0]);
}

int main(int argc, char* argv[])
{
if(argc>1)MyRev(argv[1]);
return 0;
}

这是我写的一段C语言代码。很简单,只使用了标准C的调用,可以在任何C语言平台上编译运行。功能么,就是完成字符串的倒序。例如,假设编译得到MyRev.exe,那么有这样的运行结果
>MyRev Hello
olleH

看出这代码有什么特别的吗?
对了,这段代码,除了函数头中附带的参数,函数体中没有定义和使用任何变量。是不是很有特色呀?
不用任何变量的程序是很难完成什么功能的,但这段代码却能完成字符串倒序。原因么,你应该看出来了,是利用了函数递归调用的特点,将中间结果通过递归调用的堆栈来保存着。
当然,虽然没有定义使用变量,但因为使用了递归调用,与非递归(但使用变量)方式相比,程序运行时候的内存和时间开销明显增加。
有时候,漂亮的代码,运行起来并不“漂亮”。
有时候,看上去很美的东西,其实代价很大却不实用,华而不实。

Tags: , ,

发表评论

*