|
|
Rekursiv die Summe eines Vektors aufaddieren |
|
StefanK |

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 29.06.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 20:07
Titel: Rekursiv die Summe eines Vektors aufaddieren
|
 |
könnte mir jemand bei der erstellung einer function helfen die wie folgt aussehen soll:
s=summe(x)
x ist dabei ein Vektor!
Dass ist mein Ansatz:
function summe_rec(x,i,s)
if i<=numel(x)
s=s+x(i)
summe_rec(x,i+1,s)
end
jedoch muss ich i mit 1 und s mit 0 zu beginn der function mit eingeben sonst funktioniert es nicht... kann mir jemand helfen dass ich nur noch x als eingabe argument habe und s das ausgabe argument ist?
|
|
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 20:18
Titel:
|
 |
...das ist allerdings nicht rekursiv. Dann würde sich die Funktion so lange aufrufen, bis das Ende von x erreicht ist. Meinst du das?
|
|
|
StefanK |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 29.06.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 20:24
Titel:
|
 |
leider nein... wir müssen diese funktion rekursiv schreiben.
normal würde ich das genauso machen :/
|
|
|
DSP |

Forum-Meister
|
 |
Beiträge: 2.117
|
 |
|
 |
Anmeldedatum: 28.02.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2014b
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 20:37
Titel:
|
 |
mmh...das ist dann in der Tat schön knifflig
Darfst du auch nicht ein explizites Element übergeben, also z.B. x(1). Man weiß doch sonst nie wo man vor der neuen Rekursion war.
|
|
|
StefanK |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 29.06.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 20:42
Titel:
|
 |
hmh ich denke dass ist schon erlaubt ^^
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 20:50
Titel:
|
 |
Hallo,
da der Sinn des Forums nicht ist, die Hausaufgaben für Leute zu erledigen, gebe ich mal nicht den fertigen Code, sondern einen Pseudo-Code an:
Grüße,
Harald
P.S.: wenn die Aufgabenstellung nicht so wäre, um das Programmierverständnis zu testen, dann würde man das mit sum bzw. cumsum lösen.
|
|
|
StefanK |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 29.06.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 21:01
Titel:
|
 |
danke, ich werde das gleich mal testen:)
|
|
|
StefanK |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 29.06.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 21:06
Titel:
|
 |
ok ich merke gerade dass es mich nicht weiter bringt mit meinem problem. ich kann ja durch die rekursion nur etwas an meinem vektor verändern also beispielsweise
rec_sum(x+1)
aber ich brauche doch einen index um auf die elemente des vektors zugreifen zu können also bspw. x(i)...
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 21:12
Titel:
|
 |
Hallo,
es bringt dich nicht weiter? Ich habe dir die Lösung als Pseudo-Code hingeschrieben! Insbesondere brauchst du keinen Index dafür.
Du musst diese Lösung also nur noch verstehen und in MATLAB umsetzen (es sind 6 Zeilen, von denen eine "else" und eine "end" sind), und schon hast du die Lösung.
Grüße,
Harald
|
|
|
StefanK |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 29.06.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 21:16
Titel:
|
 |
also mein problem ist die zeile in der else anweisung...
function s=summe_rec(x)
if length(x)==1
x=s
else
s=..... summe_rec(x....)
end
ich weiß es ist vllt lächerlich... aber ich habe so ein problem mit den rekursiven funktionen^^
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 21:29
Titel:
|
 |
Hallo,
ich habe es ja quasi schon hingeschrieben. Noch eine kleine Hilfestellung:
letztes Element eines Vektors x:
Alle vorherigen Elemente:
Grüße,
Harald
|
|
|
StefanK |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 9
|
 |
|
 |
Anmeldedatum: 29.06.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 21:39
Titel:
|
 |
ok jetz habe ich es... dann gab es wohl einfach ein verständigungsproblem mit unserem info-prof... ich dachte am ende jeder rekursiven funktion müsste über den funktionsnamen und die eingabe etwas verändert werdet...
also wie oben geschrieben rec_sum(x+1) oder ähnliches dass eben dass x immer wieder um 1 erhöht wird bis zum abbruch...
aber gut wenn dies nicht der fall ist bin ich beruhigt.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 29.06.2011, 21:41
Titel:
|
 |
Hallo,
wird ja. Nur dass es eben in dem Fall nicht x+1 ist, sondern x(1:end-1).
In jedem Fall ist es ja ein leichtes, sich davon zu überzeugen, dass der Code das richtige macht - und rekursiv ist er auch, da die Funktion sich selbst aufruft.
Grüße,
Harald
|
|
|
|
|
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.
|
|