#include <stdio.h> #include <string.h> char pre[30],ino[30]; void pos(int pi,int pe,int is,int ie) { int i; if(pi==pe) //输出叶子节点的值 { printf("%c",pre[pi]); return ; } if(pi>pe||is>ie) return ; //越界返回 char root = pre[pi]; //每次保存根节点的位置 for(i=is;i<=ie;i++) if(ino[i]==root) //找到中项子数的根节点 break; int len = i-is; //求出跟与起始点元素个数 pos(pi+1,pi+len,is,i-1); //左半段递归求后项子数 pos(pi+len+1,pe,i+1,ie); //有半段递归求后项子数 printf("%c",root); } int main() { while(scanf("%s %s",&pre,&ino)!=EOF) { int len = strlen(pre); pos(0,len-1,0,len-1);//递归传入左右子数的长度 printf("/n"); } return 0; } 这道题用递归确实很有意思,但是其实我的递归 用的并不好,不知道哪位大牛能给我介绍些递归方面的资料感激不尽啊!