关于递归函数
下面的代码如果点击btn1按钮会返回什么值呢?
procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage(inttostr(test(1)));
end;
function TForm1.test(aI:integer): Integer;
var
i,iResult: Integer;
begin
i := aI+1;
if i<10 then test(i)
else iResult := i;
Result := iResult;
end;
我希望它的能够返回'10',但是实际结果却是'2';下面的代码返回值才是'10'
procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage(inttostr(test(1)));
end;
function TForm1.test(aI:integer): Integer;
var
i,iResult: Integer;
begin
i := aI+1;
if i<10 then iResult := test(i)//这里是主要修改的地方
else iResult := i;
Result := iResult;//还有这里
end;
也就是说,调用递归函数的时候,必需要把iResult := test(i)函数返回给一个变量,而这个变量Result := iResult也必需最终作为返回值给Result;
如果不是这样的话就会发现:执行完最后语句(end;)之后它有回退到(Result := i;)之后在(end;)和(Result := i;)之间反复执行递归了多少次就反复执行多少次;单步跟踪就会发现,i的值也在一步步回退。所以第一段程序执行结果就是'2'。