通过实现字符串的正向输入逆向输出验证递归调用
虽然写出了代码,但一直没有明白其过程是如何实现的。
1 program E_daoxu; 2 procedure daoxu; 3 var 4 a:char; 5 begin 6 readln(a); 7 if a<>'*' then 8 daoxu; 9 write(a); 10 end; 11 12 begin 13 daoxu; 14 readln; 15 16 end.
后面再慢慢的分析,一步步的来吧。下面是在网上找到的一段代码,和我同样的问题:为什么不是到输入的a为‘*’时只输出‘*’,而是将所有的原来输入的字符全都输出,并且是倒序?
var i,n:longint; a:array[1..100]of longint; procedure make(le:longint); begin if le<n then make(le+1); write(a[le],' '); end; BEGIN readln(n); for i:=1 to n do read(a[i]); make(1); END.
解释:不是这个样子的,if le<n then make(le+1) 因为是先有了这句话,所以在满足le<n的时候,这个程序会不断深入,直到le=n的时候,才会执行最里面的一个 write(a[le],' ');,然后在开始出归,出归的过程中会依次write(a[n]) write(a[n-1]).....
就好像你电脑里的某个盘里有一个write文件,一个make文件夹,make文件夹里还有一个make文件夹,一个make文件,这样子有n个文件夹,你依次打开,直到再也没有文件夹的时候,再打开里面的write文件,然后返回前一层文件夹,这样不断返回
这样子解释懂么= =