回 帖 发 新 帖 刷新版面

主题:请教各位高手,,急啊,急啊§!!!!

program ex519(input,output);
var
a,b,c,d:integer;
procedure p(a:integer;var b:integer);
var
c:integer;
begin
a:=a+1;
b:=b+1;
c:=2;
d:=d+1;
writeln('m',a,b,c,d);
if a<3
then p(a,b);
writeln('n',a,b,c,d)
end;
begin
a:=1;
b:=1;
c:=1;
d:=1;
writeln('x',a,b,c,d);
p(a,b);
writeln('y',a,b,c,d);
end.


请问这个程序怎么writeln('n',a,b,c,d)会执行两遍了,我想不通第一遍执行完毕已经end,为什么还会回头又执行writeln('n',a,b,c,d)??、请教,万分感激!!!

回复列表 (共6个回复)

沙发

在这里,当a小于3时
if a<3
then p(a,b);
看见没,又调了

板凳

这个我知道。
我的结果是:
x 1 1 1 1
m 2 2 2 2
m 3 3 2 3
n 3 3 2 3
y 1 3 1 3

可是答案是:
x 1 1 1 1
m 2 2 2 2
m 3 3 2 3
n 3 3 2 3
n 2 3 2 3
y 1 3 1 3

再次请教!
谢谢

3 楼

我说的就是这个啊
当你调用自己的时候,这种情况叫递归
if a<3
then p(a,b);
writeln('n',a,b,c,d)
end;
看见没,p(a,b);后面还有一个打印writeln('n',a,b,c,d);
也就是说,当你调用自己反回的时候,还是会执行这句的;而且调用的时候,当前的值会保存起来,直到返回的时候使用
结果就变成
writeln('x',a,b,c,d);
writeln('m',a,b,c,d);
writeln('m',a,b,c,d);
writeln('n',a,b,c,d)
writeln('n',a,b,c,d)
writeln('y',a,b,c,d);




4 楼

program ex519(input,output);
var a,b,c,d:integer;
procedure p(a:integer;var b:integer);
var c:integer;
begin
  a:=a+1;b:=b+1;c:=2;d:=d+1;
  writeln('m',a,b,c,d);
  if a<3 then p(a,b)
  else writeln('n',a,b,c,d);
end;
begin
  a:=1;b:=1;c:=1;d:=1;
  writeln('x',a,b,c,d);
  p(a,b);
writeln('y',a,b,c,d);
end.

5 楼

[font=~{KNLe~}]~{Ub4N4p08JGU}H75D!#~}[/font]

6 楼

谢谢,懂了
非常感谢
以后还请多多指教了
谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册