<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=A_jobbrekurzi%C3%B3_fogalma</id>
	<title>A jobbrekurzió fogalma - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=A_jobbrekurzi%C3%B3_fogalma"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=A_jobbrekurzi%C3%B3_fogalma&amp;action=history"/>
	<updated>2026-04-07T13:51:56Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=A_jobbrekurzi%C3%B3_fogalma&amp;diff=137894&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoalap|PrologElm19}}   * fejezetek: 4.3.1 * fóliák: II.50-52  Az általános rekurzió költséges, helyben és időben is.   &#039;&#039;&#039;Jobbrekurzióról …”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=A_jobbrekurzi%C3%B3_fogalma&amp;diff=137894&amp;oldid=prev"/>
		<updated>2012-10-21T20:09:17Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoalap|PrologElm19}}   * fejezetek: 4.3.1 * fóliák: II.50-52  Az általános rekurzió költséges, helyben és időben is.   &amp;#039;&amp;#039;&amp;#039;Jobbrekurzióról …”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoalap|PrologElm19}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* fejezetek: 4.3.1&lt;br /&gt;
* fóliák: II.50-52&lt;br /&gt;
&lt;br /&gt;
Az általános rekurzió költséges, helyben és időben is.&lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Jobbrekurzióról beszélünk, ha:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* a rekurzív hívás a klóztörzs utolsó helyén van, vagy az utolsó helyen szereplő diszjunkció egyik ágának utolsó helyén van stb. ÉS &lt;br /&gt;
* a rekurzív hívás pillanatában nincs választási pont a predikátumban (a rekurzív hívást megelőző célok determinisztikusan futottak le, nem maradt nyitott diszjunkciós ág). &lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Jobbrekurzió optimalizálás:&amp;#039;&amp;#039;&amp;#039; az utolsó hívás végrehajtása előtt a predikátum által lefoglalt hely felszabadul ill. szemétgyűjtésre alkalmassá válik. (Ez az optimalizálás nemcsak rekurzív hívás esetén, hanem minden utolsó hívás esetén megvalósul /last call optimisation/).&lt;br /&gt;
 &lt;br /&gt;
A jobbrekurzió így tehát nem növeli a memóriaigényt, korlátlan mélységig futhat. Az imperatív nyelvek ciklusai a hosszuktól függetlenül, konstans veremhasználattal átírhatók rekurzióra.&lt;br /&gt;
 &lt;br /&gt;
===Példa: számlisták összegzése===&lt;br /&gt;
&lt;br /&gt;
Adott számlista elemeinek összegét kell előállítani:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Első megoldás&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% sum(+L, ?S): Az L számlista elemeinek összege&lt;br /&gt;
sum([], 0).&lt;br /&gt;
sum([X|L], S):-&lt;br /&gt;
	 sum(L, S0), S is S0+X.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahhoz, hogy ezt jobbrekurzív alakra hozzuk, egy háromagumentumú eljárást kell definiálni: sum(L,S0,S) feladata az, hogy S0 adott számértékhez hozzáadja L összes elemét, és az eredményt adja ki S-ben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% sum_list(+L, ?S): L számlista elemeinek összege&lt;br /&gt;
% sum jobbrekurzív valotzata&lt;br /&gt;
% SICStus Prologban a lists konyvtarban megtalalhato&lt;br /&gt;
sum_list(L, S):-&lt;br /&gt;
	 sum(L, 0, S).&lt;br /&gt;
&lt;br /&gt;
% sum(+L, +S0, ?S): Az L számlista eleminek osszege S-S0&lt;br /&gt;
sum([], S, S).&lt;br /&gt;
sum(X|L, S0, S):-&lt;br /&gt;
	 S1 is S0+X,&lt;br /&gt;
	 sum(L, S1, S).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vegyük észre, hogy a sum/3 eljárás fejkommentjében az L, S0 es S közötti összefüggést írtuk le és nem a korábbi meghatározást, amely egy kicsit imperatívabb volt a szükségesnél.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoalap]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>