tag:forum.selfhtml.org,2005:/selfrekursion und array – SELFHTML-Forum2005-09-06T19:49:08Zhttps://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869467?srt=yes#m869467schildilsblsb@gmx.de2005-09-06T14:52:36Z2005-09-06T14:52:36Zrekursion und array<p>hallo,</p>
<p>hab da mal was getestet, weil ich evtl. ein array in einer rekursion einsetzten wollte in einem algorithmus.</p>
<p>hier mal ein testcode:</p>
<pre><code class="block language-javascript">
<span class="token keyword">function</span> <span class="token function">rek</span><span class="token punctuation">(</span><span class="token parameter">i<span class="token punctuation">,</span>arr</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>i<span class="token punctuation">)</span> i<span class="token operator">=</span><span class="token string">""</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>arr<span class="token punctuation">)</span> arr<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">Array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span>i<span class="token punctuation">.</span>length<span class="token operator"><=</span><span class="token number">5</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
arr<span class="token punctuation">[</span>arr<span class="token punctuation">.</span>length<span class="token punctuation">]</span> <span class="token operator">=</span> i<span class="token punctuation">;</span>
document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span>length<span class="token punctuation">)</span><span class="token punctuation">;</span>
document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token string">"<br>"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>i<span class="token operator">+</span><span class="token string">"<br>"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
i<span class="token operator">+=</span><span class="token string">"A"</span><span class="token punctuation">;</span>
<span class="token function">rek</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span>arr<span class="token punctuation">)</span><span class="token punctuation">;</span>
document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>i<span class="token operator">+</span><span class="token string">"<br>"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
document<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>arr<span class="token punctuation">.</span>length<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<p>rek();</p>
<p>das wird dabei ausgegeben:</p>
<pre><code class="block language-text">
1
2
A
3
AA
4
AAA
5
AAAA
6
AAAAA
AAAAAA
6AAAAA
6AAAA
6AAA
6AA
6A
6
</code></pre>
<p>meine frage: wieso wird das array, wie es auch bei einer zählervariable oder dem string in diesem beispiel geschieht, anscheinend nicht auf den stack gelegt und dann wieder im filo verfahren wieder abgetragen?</p>
<p>würde mich interessieren, denn so könnte ich das array nicht verwenden in einer rekursion.</p>
<p>gruß an alle und danke für alle antworten!</p>
https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869468?srt=yes#m869468MudGuardhttp://www.andreas-waechter.de/2005-09-06T15:11:34Z2005-09-06T15:11:34Zrekursion und array<p>Hi,</p>
<blockquote>
<p>meine frage: wieso wird das array, wie es auch bei einer zählervariable oder dem string in diesem beispiel geschieht, anscheinend nicht auf den stack gelegt und dann wieder im filo verfahren wieder abgetragen?</p>
</blockquote>
<p>Du entfernst nirgends Elemente aus dem Array. Warum sollten also Elemente aus dem Array verschwinden?</p>
<p>cu,<br>
Andreas</p>
<div class="signature">-- <br>
<a href="http://www.Mud-Guard.de/" rel="nofollow noopener noreferrer">Warum nennt sich Andreas hier MudGuard?</a><br>
<a href="http://www.schreinerei-waechter.de/" rel="nofollow noopener noreferrer">Schreinerei Waechter</a><br>
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.<br>
</div>
https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869469?srt=yes#m869469schildilsblsb@gmx.de2005-09-06T15:19:35Z2005-09-06T15:19:35Zrekursion und array<blockquote>
<p>Du entfernst nirgends Elemente aus dem Array. Warum sollten also Elemente aus dem Array verschwinden?</p>
</blockquote>
<p>weil genau das geschehen sollte bei ner rekursion?</p>
<p>beim erneuten aufruf der funktion selbst wird ja jedesmal eine "kopie" der variablen auf einen stackspeicher gelegt. dieser stackspeicher wird dann stück für stück wieder abegetragen. siehst du ja beim i.<br>
ich entferne ja auch bei i nix mehr...</p>
https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869471?srt=yes#m869471MudGuardhttp://www.andreas-waechter.de/2005-09-06T15:21:21Z2005-09-06T15:21:21Zrekursion und array<p>Hi,</p>
<blockquote>
<blockquote>
<p>Du entfernst nirgends Elemente aus dem Array. Warum sollten also Elemente aus dem Array verschwinden?<br>
weil genau das geschehen sollte bei ner rekursion?</p>
</blockquote>
</blockquote>
<p>Wie kommst Du darauf?</p>
<blockquote>
<p>beim erneuten aufruf der funktion selbst wird ja jedesmal eine "kopie" der variablen auf einen stackspeicher gelegt.</p>
</blockquote>
<p>Genau. Eine Kopie der Referenz auf das Array.<br>
Aber NICHT eine Kopie des Array.</p>
<p>cu,<br>
Andreas</p>
<div class="signature">-- <br>
<a href="http://www.Mud-Guard.de/" rel="nofollow noopener noreferrer">Warum nennt sich Andreas hier MudGuard?</a><br>
<a href="http://www.schreinerei-waechter.de/" rel="nofollow noopener noreferrer">Schreinerei Waechter</a><br>
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.<br>
</div>
https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869472?srt=yes#m869472schildilsblsb@gmx.de2005-09-06T15:24:49Z2005-09-06T15:24:49Zrekursion und array<blockquote>
<p>Hi,</p>
</blockquote>
<blockquote>
<p>Genau. Eine Kopie der Referenz auf das Array.<br>
Aber NICHT eine Kopie des Array.</p>
</blockquote>
<p>soll das heissen ein array wird anders behandelt als ein string oder ein integer? also deine erklärung leuchtet mir nich ein...</p>
https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869475?srt=yes#m869475Rouventhimmsd@gmx.de2005-09-06T16:15:28Z2005-09-06T16:15:28Zrekursion und array<p>Hi,</p>
<p>auf die Gefahr hin, jetzt _mein_ Unwissen zu entblößen, aber JAVA hantiert so ungerne mit wahren Objekten, dass da meistens Referenzen hin und her gehen. Wenn das in JavaScript auch nur annähernd so ist, dann sollten auch hier an die Funktionen in den allermeisten Fällen Referenzen übergeben werden.<br>
Zumindest bei sämtlichen Formularen mit denen ich bisher gearbeitet habe war das auch so - Wie schlimm wäre es, wenn du<br>
aendereFormat(document.formular.textfeld)<br>
aufrufst, und dann anstelle einer Referenz auf das Feld eine Kopie des ganzen bekommst.<br>
Musste ich mich anfangs auch bei JAVA dran gewöhnen, gab so den ein oder anderen Fehler, den ich länger gesucht habe. Muss man halt wissen.</p>
<p>MfG<br>
Rouven</p>
<div class="signature">-- <br>
-------------------<br>
ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
</div>
https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869473?srt=yes#m869473molilymolily@gmx.de2005-09-06T18:01:30Z2005-09-06T18:01:30Zrekursion und array<p>Hallo,</p>
<blockquote>
<blockquote>
<p>Genau. Eine Kopie der Referenz auf das Array.<br>
Aber NICHT eine Kopie des Array.</p>
</blockquote>
<p>soll das heissen ein array wird anders behandelt als ein string oder ein integer?</p>
</blockquote>
<p>Ein Array ist in JavaScript zunächst einmal kein Typ, sondern nur ein spezielles Objekt vom Typ Object.</p>
<p>Zudem gibt es zwei verschiedene Arten von String- und Number-Werten. Zum einen die primitive values und zum anderen die objects. var bla = "blub"; erzeugt ein primitive value. var bla = new String("blub"); erzeugt ein object. Ein Array ist immer vom Typ Object, also in dieser Hinsicht ein object.<br>
Objects haben Identität (sind nur mit sich selbst identisch), primitive values haben keine, d.h. sie sind mit anderen primitive values desselben Typs und desselben Werts identisch.</p>
<p>Wenn man primitive values an eine Funktion übergibt oder einem anderen Objekt zuweist, werden sie immer kopiert. Wenn man objects an eine Funktion übergibt oder einem anderen Objekt zuweist, werden sie immer referenziert. Das heißt, du arbeitest in allen rekursiven Funktionsaufrufen ständig mit demselben Array.</p>
<p>Mathias</p>
https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869474?srt=yes#m869474schildilsblsb@gmx.de2005-09-06T19:49:08Z2005-09-06T19:49:08Zrekursion und array<blockquote>
<p>Ein Array ist in JavaScript zunächst einmal kein Typ, sondern nur ein spezielles Objekt vom Typ Object.</p>
</blockquote>
<p>[...]</p>
<p>danke mathias. das erklärts. daran hatte ich überhaupt nicht gedacht...</p>
<p>gruß schildi</p>