====== Rekurzió ======
Rekurzió azt jelenti, hogy az alprogram meghívhatja saját magét mindaddig, amíg egy határértéket el nem ér.
===== Rekurzív összeg =====
function osszegzes (x : integer) : integer;
begin
if x = 1
then osszegzes := 1
else osszegzes := osszegzes(x - 1) + x
end;
===== Faktoriális számítás =====
program faktor;
function faktorialis(n:integer):integer; {rekuzívan}
var fakt:integer;
begin
if n > 1 then fakt:=n*faktorialis(n-1)
else fakt:=1;
faktorialis:=fakt;
end;
function fakt(n:integer):integer; {ciklussal}
var f,i:integer;
begin
f:=1;
for i:=1 to n do
f:=i*f;
fakt:=f;
end;
begin
writeln('4! = ',faktorialis(4));
writeln('4! = ',fakt(4));
readln;
end.
===== Rekurzív átalakító kettes számrendszerbe =====
program atalakit;
procedure kettesbe(n:integer);
var egesz, maradek: integer;
begin
maradek:= n mod 2;
egesz:= n div 2;
if egesz > 0 then kettesbe(egesz);
write(maradek);
end;
begin
write('10 a 2-be az ');
kettesbe(10);
readln;
end.
===== Hanoi tornyai =====
program hanoi_tornyai;
procedure hanoi(n:integer;forras,cel,seged:string[5]);
begin
if n > 0 then begin
hanoi(n-1,forras,seged,cel);
writeln(n,' ',forras:5,' -> ',cel:5);
hanoi(n-1,seged,cel,forras);
end;
end;
begin
hanoi(3,'Rez','Arany','Ezust');
readln;
end.
===== Huszárvándorlás-probléma =====
program lougras;
uses crt;
var i,j,n,nsqr:integer; q,qq:boolean;
dx,dy:array[1..8]of integer;
h:array[1..8,1..8]of integer;
procedure lepes(i,x,y:integer;var q:boolean);
var k,u,v:integer; q1:boolean;
begin k:=0;
repeat k:=k+1; q1:=false;
u:=x+dx[k];v:=y+dy[k];
if(1<=u)and(u<=n)and(1<=v)and(v<=n)and(h[u,v]=0)then begin
h[u,v]:=i;
if i
===== Huszárvándorlás-probléma. Kimerítő keresés =====
program lougras_mind;
var
h: array[1..8,1..8]of integer;
n,i,j,i0,j0,t:integer;
x,y,x0,y0: integer;
dx,dy: array[1..8]of integer;
procedure kereskovlepes(i,x,y: integer);
var
u,v,k:integer;
begin
for k:=1 to 8 do
begin
u:=x+dx[k]; v:=y+dy[k];
if (1<=u) and (u<=n) and (1<=v) and (v<=n) and (h[u,v]=0)
then
begin
h[u,v]:=i; {bejegyzes}
if (i
===== Nyolckirálynő-probléma =====
program vezerek;
var i:integer; qq:boolean;
x:array[1..8]of integer;
a:array[1..8]of boolean;
b:array[2..16]of boolean;
c:array[-7..7]of boolean;
procedure elhelyez(i:integer;var q:boolean);
var j:integer;
begin j:=0;
repeat j:=j+1; q:=false;
if (a[j])and(b[i+j])and(c[i-j]) then begin
x[i]:=j;
a[j]:=false;b[i+j]:=false;c[i-j]:=false;
if i<8 then begin
elhelyez(i+1,q);
if not q then begin
a[j]:=true;b[i+j]:=true;c[i-j]:=true;
end;
end
else q:=true;
end;
until q or (j=8);
end;
begin
for i:=1 to 8 do a[i]:=true;
for i:=2 to 16 do b[i]:=true;
for i:=-7 to 7 do c[i]:=true;
elhelyez(1,qq);
for i:=1 to 8 do write(x[i]:4);
readln;
end.
===== Nyolckirálynő-probléma. Kimerítő keresés =====
program minden_vezer;
var i:integer;
x:array[1..8]of integer;
a:array[1..8]of boolean;
b:array[2..16]of boolean;
c:array[-7..7]of boolean;
procedure elhelyez(i:integer);
var j,k:integer;
begin
for j:=1 to 8 do begin
if (a[j])and(b[i+j])and(c[i-j]) then begin
x[i]:=j;
a[j]:=false;b[i+j]:=false;c[i-j]:=false;
if i<8 then elhelyez(i+1)
else
for k:=1 to 8 do
if k<8 then write(x[k]:4)else writeln(x[k]:4);
a[j]:=true;b[i+j]:=true;c[i-j]:=true;
end;
end;
end;
begin
for i:=1 to 8 do a[i]:=true;
for i:=2 to 16 do b[i]:=true;
for i:=-7 to 7 do c[i]:=true;
elhelyez(1);
readln;
end.
===== Interaktív játékok =====
* [[http://www.springfrog.com/games/chess/knights-tour/|Huszárvándorlás-probléma]]
* [[http://www.hbmeyer.de/backtrack/achtdamen/eight.htm|Nyolckirálynő-probléma]]
* [[http://www.web-games-online.com/towers-of-hanoi/index.php|Hanoi tornyai]]