tag:forum.selfhtml.org,2005:/self rekursion und array – SELFHTML-Forum 2005-09-06T19:49:08Z https://forum.selfhtml.org/self/2005/sep/6/rekursion-und-array/869467?srt=yes#m869467 schildi lsblsb@gmx.de 2005-09-06T14:52:36Z 2005-09-06T14:52:36Z rekursion 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#m869468 MudGuard http://www.andreas-waechter.de/ 2005-09-06T15:11:34Z 2005-09-06T15:11:34Z rekursion 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#m869469 schildi lsblsb@gmx.de 2005-09-06T15:19:35Z 2005-09-06T15:19:35Z rekursion 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#m869471 MudGuard http://www.andreas-waechter.de/ 2005-09-06T15:21:21Z 2005-09-06T15:21:21Z rekursion 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#m869472 schildi lsblsb@gmx.de 2005-09-06T15:24:49Z 2005-09-06T15:24:49Z rekursion 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#m869475 Rouven thimmsd@gmx.de 2005-09-06T16:15:28Z 2005-09-06T16:15:28Z rekursion 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#m869473 molily molily@gmx.de 2005-09-06T18:01:30Z 2005-09-06T18:01:30Z rekursion 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#m869474 schildi lsblsb@gmx.de 2005-09-06T19:49:08Z 2005-09-06T19:49:08Z rekursion 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>