A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalon Előző változat Következő változat | Előző változat | ||
inf-prog-fszi:rekurzio [2017/06/22 13:50] beistvan |
inf-prog-fszi:rekurzio [2017/06/22 14:00] (aktuális) beistvan |
||
---|---|---|---|
Sor 1: | Sor 1: | ||
+ | ====== 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 ===== | ||
+ | |||
+ | <code pascal rekurziv_osszeg.pas> | ||
+ | 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 ===== | ||
+ | |||
+ | <code pascal faktorialis.pas> | ||
+ | program faktor; | ||
+ | function faktorialis(n: | ||
+ | var fakt: | ||
+ | begin | ||
+ | if n > 1 then fakt: | ||
+ | else fakt:=1; | ||
+ | faktorialis: | ||
+ | end; | ||
+ | function fakt(n: | ||
+ | var f, | ||
+ | begin | ||
+ | f:=1; | ||
+ | for i:=1 to n do | ||
+ | f:=i*f; | ||
+ | fakt:=f; | ||
+ | end; | ||
+ | begin | ||
+ | writeln(' | ||
+ | writeln(' | ||
+ | readln; | ||
+ | end. | ||
+ | </ | ||
+ | |||
+ | ===== Rekurzív átalakító kettes számrendszerbe ===== | ||
+ | |||
+ | <code pascal atalakit.pas> | ||
+ | program atalakit; | ||
+ | procedure kettesbe(n: | ||
+ | var egesz, maradek: integer; | ||
+ | begin | ||
+ | | ||
+ | | ||
+ | if egesz > 0 then kettesbe(egesz); | ||
+ | | ||
+ | end; | ||
+ | begin | ||
+ | write(' | ||
+ | kettesbe(10); | ||
+ | readln; | ||
+ | end. | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Hanoi tornyai ===== | ||
+ | |||
+ | <code pascal hanoi_tornyai.pas> | ||
+ | program hanoi_tornyai; | ||
+ | procedure hanoi(n: | ||
+ | begin | ||
+ | if n > 0 then begin | ||
+ | hanoi(n-1, | ||
+ | writeln(n,' | ||
+ | hanoi(n-1, | ||
+ | end; | ||
+ | end; | ||
+ | begin | ||
+ | hanoi(3,' | ||
+ | readln; | ||
+ | end. | ||
+ | </ | ||
+ | |||
+ | ===== Huszárvándorlás-probléma ===== | ||
+ | |||
+ | <code pascal lougras.pas> | ||
+ | program lougras; | ||
+ | uses crt; | ||
+ | var i, | ||
+ | | ||
+ | | ||
+ | | ||
+ | var k, | ||
+ | begin k:=0; | ||
+ | repeat k:=k+1; q1:=false; | ||
+ | | ||
+ | | ||
+ | h[u,v]:=i; | ||
+ | if i<nsqr then begin lepes(i+1, | ||
+ | if not(q1) then h[u, | ||
+ | else q1:=true; | ||
+ | end; | ||
+ | until q1 or (k=8); | ||
+ | q:=q1; | ||
+ | end; | ||
+ | var c:char; | ||
+ | begin | ||
+ | dx[1]: | ||
+ | dx[5]:=-2; dx[6]:=-1; dx[7]: | ||
+ | dy[1]: | ||
+ | dy[5]:=-1; dy[6]:=-2; dy[7]:=-2; dy[8]:=-1; | ||
+ | repeat | ||
+ | | ||
+ | for i:=1 to n do | ||
+ | for j:=1 to n do h[i,j]:=0; | ||
+ | | ||
+ | | ||
+ | if qq then | ||
+ | for i:=1 to n do begin | ||
+ | for j:=1 to n do write(h[i, | ||
+ | | ||
+ | end | ||
+ | else Writeln(' | ||
+ | | ||
+ | | ||
+ | until (c=#27); | ||
+ | |||
+ | end. | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Huszárvándorlás-probléma. Kimerítő keresés ===== | ||
+ | |||
+ | <code pascal lougras_mind.pas> | ||
+ | program lougras_mind; | ||
+ | |||
+ | var | ||
+ | h: array[1..8, | ||
+ | n, | ||
+ | x,y,x0,y0: integer; | ||
+ | dx,dy: array[1..8]of integer; | ||
+ | |||
+ | procedure kereskovlepes(i, | ||
+ | var | ||
+ | u, | ||
+ | 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, | ||
+ | if (i<n*n) then | ||
+ | kereskovlepes(i+1, | ||
+ | else | ||
+ | | ||
+ | | ||
+ | for i0:=1 to n do | ||
+ | begin | ||
+ | for j0:=1 to n do | ||
+ | | ||
+ | writeln; | ||
+ | end; | ||
+ | | ||
+ | end; | ||
+ | | ||
+ | end; | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | |||
+ | |||
+ | BEGIN | ||
+ | |||
+ | x0:=1; y0:=1; n:=5; t:=0; | ||
+ | for i:=1 to n do | ||
+ | for j:=1 to n do | ||
+ | | ||
+ | dx[1]:= 2; dy[1]:= 1; | ||
+ | dx[2]:= 1; dy[2]:= 2; | ||
+ | dx[3]:=-1; dy[3]:= 2; | ||
+ | dx[4]:=-2; dy[4]:= 1; | ||
+ | dx[5]:=-2; dy[5]:=-1; | ||
+ | dx[6]:=-1; dy[6]:=-2; | ||
+ | dx[7]:= 1; dy[7]:=-2; | ||
+ | dx[8]:= 2; dy[8]:=-1; | ||
+ | |||
+ | |||
+ | h[x0, | ||
+ | |||
+ | kereskovlepes(2, | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | END. | ||
+ | </ | ||
+ | |||
+ | ===== Nyolckirálynő-probléma ===== | ||
+ | |||
+ | <code pascal nyolc_vezer.pas> | ||
+ | program vezerek; | ||
+ | var i:integer; qq:boolean; | ||
+ | x: | ||
+ | a: | ||
+ | b: | ||
+ | c: | ||
+ | |||
+ | procedure elhelyez(i: | ||
+ | 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]: | ||
+ | if i<8 then begin | ||
+ | | ||
+ | if not q then begin | ||
+ | a[j]: | ||
+ | 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, | ||
+ | for i:=1 to 8 do write(x[i]: | ||
+ | readln; | ||
+ | end. | ||
+ | </ | ||
+ | |||
+ | ===== Nyolckirálynő-probléma. Kimerítő keresés ===== | ||
+ | |||
+ | <code pascal nyolc_vezer_mind.pas> | ||
+ | program minden_vezer; | ||
+ | var i:integer; | ||
+ | x: | ||
+ | a: | ||
+ | b: | ||
+ | c: | ||
+ | procedure elhelyez(i: | ||
+ | var j, | ||
+ | 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]: | ||
+ | if i<8 then elhelyez(i+1) | ||
+ | else | ||
+ | for k:=1 to 8 do | ||
+ | if k<8 then write(x[k]: | ||
+ | a[j]: | ||
+ | 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:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||