S
softlong
Unregistered / Unconfirmed
GUEST, unregistred user!
1、 procedure TForm1.Button1Click(Sender: TObject);
var a:byte;
procedure Num(x:integer);
begin
if x=5 then
a:=10
else
begin
Num(x+1);
//ShowMessage(vartostr(a));
a:=a+2;
end;
end;
begin
Num(1);
ShowMessage(vartostr(a));
end;
2.
procedure TForm1.Button1Click(Sender: TObject);
var a:byte;
procedure Num(x:integer);
begin
if x=5 then
a:=10
else
begin
Num(x+1);
ShowMessage(vartostr(a));
a:=a+2;
end;
end;
begin
Num(1);
ShowMessage(vartostr(a));
end;
单步执行时,你可以看出,当x=5时,
代码1是执行完a:=10之后,紧接着执行
a:=a+2,
而第二段代码,当x=5时,执行完a:=10之后直接
跳到执行到end;然后才返加到上次调用的下一条语句
继续执行
当达到边界条件时,也就是当x=5时,
两段代码的执行顺序为什么不同?
var a:byte;
procedure Num(x:integer);
begin
if x=5 then
a:=10
else
begin
Num(x+1);
//ShowMessage(vartostr(a));
a:=a+2;
end;
end;
begin
Num(1);
ShowMessage(vartostr(a));
end;
2.
procedure TForm1.Button1Click(Sender: TObject);
var a:byte;
procedure Num(x:integer);
begin
if x=5 then
a:=10
else
begin
Num(x+1);
ShowMessage(vartostr(a));
a:=a+2;
end;
end;
begin
Num(1);
ShowMessage(vartostr(a));
end;
单步执行时,你可以看出,当x=5时,
代码1是执行完a:=10之后,紧接着执行
a:=a+2,
而第二段代码,当x=5时,执行完a:=10之后直接
跳到执行到end;然后才返加到上次调用的下一条语句
继续执行
当达到边界条件时,也就是当x=5时,
两段代码的执行顺序为什么不同?