|
Senzenberger |

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 07.06.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.09.2013, 22:58
Titel: Rekursive Programmieren
|
 |
Hi, es geht darum Quadratzahlen zu programmieren bis zu 50. Das heißt die Quadratzahl größer 50 darf nicht mehr ausgeben werden. Folgender Code funktioniert aber es ist eine If-Abfrage innerhalb der Schleife=>das ist nicht gut bezüglich Programm Geschwindigkeit. Diese spielt bei mir keine Rolle.
Kollege sprach rekursive Programmierung an. Im folgenden Code habe ich es versucht aber ich setze mir n und y immer wieder auf null.
danke.bis bald
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 22.09.2013, 02:57
Titel: Re: Rekursive Programmieren
|
 |
Hallo Senzenberger,
Hast Du eine Frage?
Wie wäre dies:
Gruß, Jan
[EDITED, fehlende Klammer eingefügt]
Zuletzt bearbeitet von Jan S am 22.09.2013, 20:41, insgesamt einmal bearbeitet
|
|
|
Senzenberger |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 07.06.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.09.2013, 09:43
Titel:
|
 |
Hallo Jan,
danke für die rasche un erstaunliche kurze Antwort. Ich bekomme aber die Fehlermeldung"Operator '.^' s seldom used in this context". Was mach ich da noch falsch, den deine Lösung wäre mir lieber weil ich gestern noch auf folgende Lösung gekommen wäre.
bis bald
Senzi
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.09.2013, 10:24
Titel:
|
 |
Hallo Senzenberger,
Hausaufgaben zu lösen, ohne zu wissen, welches Vorwissen der Fragende haben sollte, ist sehr schwierig. Wie Du auf »persistent« gekommen bist, will ich am Besten gar nicht wissen, es sollte aber an der Stelle nur so von Warnhinweisen gewimmelt haben: »Nur verwenden, wenn man auch ganz genau weiß was man tut«, »nur für sehr erfahrene Programmierer«, »tu's nicht!«.
Also vergiss erst mal dass es »persistent« überhaupt gibt. Alle Variablen in Funktionen sind »lokal«, das heißt, sie haben keinen Wert, wenn die Funktion startet, und vergessen ihren Wert wieder, wenn die Funktion fertig ist.
Alle Werte die eine Funktion von außen braucht, werden über ihre Parameter übergeben, alle Werte, die die Funktion zurückgibt, werden über ihre Rückgabeparameter zurückgegeben.
|
|
|
Senzenberger |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 07.06.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.09.2013, 11:15
Titel:
|
 |
hallo Sirius3
danke so funktioniert es sehr gut. Ich arbeite mich gerade durch ein Buch und das war eine Aufgabe. Also hast du recht mit der Hausaugaben. Den Gefahren bei der Verwendung von persistent war ich mir nicht bewusst aber ich wurde skeptisch als ich die Variablen vor jeden Druchlauf mit clear all löschen musste(persistent gefunden in einem Forum).
Ich wollte die Funktion so schreiben das man keine Eingabe Parameter benötigt.
Senzi
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 22.09.2013, 15:40
Titel:
|
 |
Zitat: |
ch wollte die Funktion so schreiben das man keine Eingabe Parameter benötigt |
eine rekursive funktion zu schrieben die quasi nicht weis was sie vorher schon gemacht hat ist glaube ich nicht sinnvoll umzusetzen.
_________________
richtig Fragen
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 22.09.2013, 21:15
Titel:
|
 |
|
 |
|
Hallo Senzenberger,
Zitat: |
Ich bekomme aber die Fehlermeldung"Operator '.^' s seldom used in this context" |
Das ist aber eine sehr ungewöhnliche Fehlermeldung. Ich bekomme:
Zitat: |
??? s = (1:floor(sqrt(50)) .^2
|
Error: Expression or statement is incorrect--possibly unbalanced (, {, or [. |
Da fehlte nämlich eine schließende Klammer, also:
Mehr Code ist wirklich nicht nötig. Eine Rekursive Funktion dafür zu verwenden und statt eines Inputs persistent Variablen zu nitzen ist wirklich schräg. Klar, machen kann man das. Aber der künstlich erzeuigte Komplexität steht in keiner Relation zur Einfachheit der Fragestellung.
Überlicherweise werden solche Aufgaben mit einer WHILE-Schleife gelöst, genau wie Du es in Deinem ersten Post gezeigt hast. Die Behauptung, dass IF-Blöcke in der Schleife ein Problem für die Geshwindigkeit sind, ist nicht stichhaltig. Die Laufzeit für das Programm beträgt auf meiner betagten Core2Duo 2.3GHz Maschine 0.00000208 Sekunden. Da der Inhalt des Bildschirms nur mit 60Hz dargestellt wird, also einmal pro 0.01667 Sekunden, ist die Laufzeit hier vollkommen unerheblich.
Der Versuch die Funktion rekursiv mit versteckter Parameter-Übergabe in persistenten Variablen zu schreiben wird dagegen millionenfach mehr Zeit benötigen, als die Laufzeit benötigt.
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|