Nous sommes parfois amenés à travailler sur des suites qui dépendent
d'autres suites. Ainsi, dans l'exemple suivant, la suite u dépend de la suite v,
qui elle dépend de u. Nous pouvons
facilement réaliser le programme permettant de calculer les n-ièmes termes de
ces deux suites, mais d'un point de vue algorithmique, cela nous amène à
programmer une récursivité croisée; en effet, la fonction "u" appelle
la fonction "v", cette dernière appelant "u".
Voici la définition des deux suites, suivie du programme;
u(0)=1, v(0)=2 et, pour tout entier naturel n :
u(n+1)=3u(n)+2v(n)
v(n+1)=2u(n)+3v(n)
Remarques :
1) la suite u-v est constante égale à 1.
2) Comme la fonction "v" est définie après "u",
cela nous amène à utiliser le mot "forward".
function v(n: integer): int64; forward;
function u(n: integer): int64;
begin
if n = 0 then result := 1 //condition de sortie de la récursion
else result := 3 * u(n - 1) + 2 * v(n - 1);
end;
function v;
begin
if n = 0 then result := 2 //condition de sortie de la récursion
else result := 2 * u(n - 1) + 3 * v(n - 1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
Screen.Cursor := crHourGlass;
Memo1.Clear;
for i := 0 to SpinEdit1.Value - 1 do
begin
Memo1.Lines.Add('u(' + IntToStr(i) + ') = ' + IntToStr(u(i)));
Memo1.Lines.Add('v(' + IntToStr(i) + ') = ' + IntToStr(v(i)));
Memo1.Lines.Add(' ');
end;
Screen.Cursor := crDefault;
end;
Télécharger le code source Delphi