====== 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]]