rekursion und array – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self rekursion und array Tue, 06 Sep 05 14:52:36 Z https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869467#m869467 https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869467#m869467 <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> rekursion und array Tue, 06 Sep 05 15:11:34 Z https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869468#m869468 https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869468#m869468 <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> rekursion und array Tue, 06 Sep 05 15:19:35 Z https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869469#m869469 https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869469#m869469 <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> rekursion und array Tue, 06 Sep 05 15:21:21 Z https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869471#m869471 https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869471#m869471 <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> rekursion und array Tue, 06 Sep 05 15:24:49 Z https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869472#m869472 https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869472#m869472 <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> rekursion und array Tue, 06 Sep 05 16:15:28 Z https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869475#m869475 https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869475#m869475 <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> rekursion und array Tue, 06 Sep 05 18:01:30 Z https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869473#m869473 https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869473#m869473 <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> rekursion und array Tue, 06 Sep 05 19:49:08 Z https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869474#m869474 https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869474#m869474 <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>