递归算法有何特点( 四 )


#include<stdio.h>
#include<malloc.h>
voidmain()
{
inti;
char*c;
c=(char*)malloc(1*sizeof(char));
for(i=0;;i++)
{
*(c+i)=getchar();
if(*(c+i)=='\n')
{
*(c+i)='\0';
break;
}
else
c=(char*)realloc(c,(i+2)*sizeof(char));
}
for(--i;i>=0;i--)
{
putchar(*(c+i));
}
printf("\n");
free(c);
}
怎么样?不错,准确的应用内存,几乎没有浪费什么空间,这种方法也体现了一下指针的强大功能,写这个程序虽然不敢说这个人已经掌握了指针的应用,但是起码可以说他已经会用指针了 。代码写出来,看起来已经有点美感 。
但是也有一些人还是比较喜欢动脑筋的,经过一番思考,终于想出了第三种比较容易写的方法,也许有写初学者可能觉得有些难度,但是事实上这个东西一点都不难,如果稍微有点程序功底之后再看这段代码,应该是相当轻松!
#include<stdio.h>
voidrun()
{
charc;
c=getchar();
if(c!='\n')
{
run();
}
else
{
return;
}
putchar(c);
}
voidmain()
{
run();
printf("\n");
}
写出的代码让人眼前一亮,哇!原来递归功能简单而又好用,那我们为什么不好好利用呢?但是递归也不一定就是最好的选择,因为有时候虽然递归用起来很方便,但是效率却不高,以后的讨论中还会详细说明 。

猜你喜欢