递归调用问题!
此程序为二叉树遍历问题,已知前序和中序遍历序列,求后序遍历序列的问题!
program tree(input,output);
var
s1,s2:string;
procedure solve(s1,s2:string);
var
k:integer;
begin
k:=pos(s1[1],s2);
if k>1 then solve(copy(s1,2,k),copy(s2,1,k-1));
if k<length(s2) then solve(copy(s1,k+1,length(s1)-k),copy(s2,k+1,length(s2)-k));
write(s2[k]);
end;
procedure init;
begin
assign(input,'tree.in');assign(output,'tree.out');
reset(input);rewrite(output);
end;
procedure outnt;
begin
close(input);
close(output);
end;
begin
init;
readln(s1);
readln(s2);
solve(s1,s2);
outnt;
end.
在
if k<length(s2) then solve(copy(s1,k+1,length(s1)-k),copy(s2,k+1,length(s2)-k)); 此句中,if k<length(s2),如将s2改为s1的话,就堆栈溢出,为什么?
参考答案:你用什么PASCAL?
是FREE PASCAL 还是TURBO PASCAL?
递归调用的最大问题就是堆栈溢出error
因为递归调用是一层一层调用,当问题太大时,就堆栈溢出error了。
在不断调用中,s1,s2分化出来的调用就不同了。
还有一种可能是编译器的问题。