delphi中递归函数的使用

关于递归函数
下面的代码如果点击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'。

posted on 2013-01-04 16:17  上上智  阅读(353)  评论(0编辑  收藏  举报