PASCAL递归如何转非递归

来源:百度知道 编辑:UC知道 时间:2024/05/14 14:50:33
请以N个数的排列问题为例,谢谢

递归实际上是堆栈实现的,所以模拟堆栈可以解决所有递归题目。
程序如下:(空格被自动删了真害人)
Program ex;
// By HPF-df
// 07.7.24
Var
n, i, top: longint;
a: array[1..200]of byte;
b: array[0..200]of boolean;
Begin
readln(n);
fillchar(a, sizeof(a), 0);
fillchar(b, sizeof(b), true);
top := 0;
repeat
inc(top);
if top = n + 1 then
begin
for i:=1 to n do
write(a[i], ' ');
dec(top, 2);
writeln;
end
else
begin
b[a[top]] := true;
for i:=a[top] + 1 to n do
if b[i] then
begin
b[i] := false;
a[top] := i;
break
end;
if b[a[top]] then
begin
a[top] := 0;
dec(top, 2);
end;
end;
until top < 0;
End.

jian dan ji le!!!!!