Delphi函数的递归调用
函数的递归调用
在Object Pascal 中,过程或函数必须先说明再调用。以上规则在递归调用时属于例外情况。所谓递归调用,是指函数A 调用函数B,而函数B 又调用函数A 的情况,或是指一个函数调用自身的特殊情况。在递归调用中,函数要进行前置,即在函数或过程的标题部分最后加上保留字Forward。下文的例子是一个递归调用的典型例子:
program Project1;
{$APPTYPE CONSOLE}
var
Alpha:Integer;
procedure Test2(var A:Integer);forward;
//Test2 被说明为前置过程
procedure Test1(var A:Integer);
begin
A:=A-1;
if A>0 then
Test2(A); //经前置说明,调用未执行的过程Test2
writeln(A);
end;
procedure Test2(var A:Integer); //经前置说明的Test2 的执行部分
begin
A:=A div 2;
if A>0 then
Test1(A); //在Test2 中调用已执行的过程Test1
end;
begin
Alpha := 15; //给Alpha 赋初值
Test1(Alpha); //第1 次调用Test1,递归开始
end.
程序开始时给Alpha 赋初值,并实现先减1 再除2 的循环递归调用,直到Alpha 小于0 为止。