问题描述
- 这个递归为什么输出少一位?
-
#include <stdio.h> void prints(char *p){ if(*p != '') prints(++p); if(*p != '') printf("%c",*p); } int main(void){ char p[] = "hello"; prints(p); printf("n"); return 0; }
程序运行结果如下:
F:test>gcc -g -o test.exe test.c F:test>test.exe olle
输入结果少了h,不理解为什么,求大神帮忙解释一下,在此跪谢!
解决方案
这样就ok了,因为如果++p在先,下面一行打印的就是当前字符的下一个字符
void prints(char *p){
if(*p != '') printf("%c",*p);
if(*p != '') prints(++p);
}
解决方案二:
if(*p != '') prints(++p);
->
if(*p != '') prints(p + 1);
解决方案三:
http://codepad.org/ODdLzVco
olleh
解决方案四:
第三行和第四行换一下
#include
void prints(char *p){
if(*p != '') printf("%c",*p);
if(*p != '') prints(++p);
}
int main(void){
char p[] = "hello";
prints(p);
printf("n");
return 0;
}
解决方案五:
++p是先加后操作所以第一个被搞没了
解决方案六:
#if 1
#include
void prints(char *p){
//正续
//if (*p != '') printf("%c", *p);
//if (*p != '') prints(++p);
//反序
if (*p != '') prints(++p);
if (*p != '') printf("%c", *p);
}
int main(void){
char p[] = " hello";
prints(p);
printf("n");
return 0;
}
#endif
你要想通过递归反序输出也是可以的, 只不过要避免一下栈本身的缺陷
时间: 2024-09-14 05:04:28