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'。

转载于:https://www.cnblogs.com/delphi-xjk/archive/2013/01/04/2844429.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值