问答题
编写一个递归过程,它从键盘读入一个任意长的字符串,该字符串以"."作为结束,要求打印出它的倒序字符串(不包含".")。
【正确答案】(1)思路
假设用户输入了一个字符串,交由reverse()函数处理,处理过程应为:如果首字符为".",则结束;否则,先调用reverse()处理后面的字符串,最后打印首字符。这样,即可完成打印倒序字符串的功能。
处理输入的方法是,在递归函数中直接用getchar()函数读取字符,由于是递归调用,所以实际的情况是能处理一个字符串,且理论上能读入任意长的字符串。
(2)算法
void reverse(void){
int newchar;
newchar=getchar();
if(newchar=='.')
return;
else{
reverse();
putchar(newchar);
}
}
(3)代价分析
假定用户输入了长为n的字符串,需入、出栈各n次,共2n次,故时间代价为O(n)。
【答案解析】