Umkehrung eines Wortes
@lucky88: Das ist sicher keine Lösung auf die es Punkte gibt. Die Vorschrift mit dem aufteilen von erstem Buchstaben und Rest des Wortes soll laut Aufgabenstellung ja rekursiv angewandt werden und nicht nur einmal.
Wenn man so gar keinen Ansatz hat, dann wirkt auch das schwer.DasIch hat geschrieben:Du kannst einfach die Haskell Lösung zu Python übertragen, so schwer ist dass nicht.
Ich liefere mal folgenden Ansatz bei dem nur noch die Rekursion ergänzt werden muss.
Code: Alles auswählen
def reverse(val):
if val:
return val[1:] + val[:1]
return val
print reverse('Hallo')
Wenn der Interpreter nicht gut genug ist selbst einfachste Endrekursionen aufzulösen, dann ist das kein Problem von Rekusionen, sondern ein Problem des Interpreters./me hat geschrieben:Ja, man kann. Man kann sich durchaus - und das ist jetzt nicht mal abwertend gemeint - von jedem Gedanken an Performance, Speicherverbrauch und Umsetzung innerhalb des Computers verabschieden.sma hat geschrieben:Das Python ein willkürliches Limit der Rekursionstiefe implementiert ändert nichts daran, dass die rekursive Lösung elegant und einfach ist. Außerdem kann man problemlos "hallo" mit 5 Buchstaben umkehren ohne je von diesem Limit zu wissen.
Das Leben ist wie ein Tennisball.
Trotzdem wird man sich ja wohl an die Implementierung anpassen müssen, wenn diese nicht für tiefe Rekursion optimiert wurde.EyDu hat geschrieben:Wenn der Interpreter nicht gut genug ist selbst einfachste Endrekursionen aufzulösen, dann ist das kein Problem von Rekusionen, sondern ein Problem des Interpreters.
Unabhängig davon will die Aufgabe ja hier offenbar ausdrücklich, dass Rekursion verwendet wird. Von daher erübrigt sich die Frage wohl. Bevor es gar keine Punkte gibt, würde ich eher gemäß Aufgabenstellung arbeiten und evtl anmerken, dass es auch anders ginge.
@EyDu: Nur sind viele Sprachen so ”schlecht” das nicht zu können. Und wenn man die Realität ignoriert und trotzdem das angeblich elegantere bei solchen Sprachen verwendet, sitzt das Problem wieder vor dem Rechner.
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Man kann sich tail calls natürlich auch selber bauen:
Code: Alles auswählen
from the_link_above import bouncy, throw, land, trampoline
@bouncy
def rev(s, acc=''):
if s:
return rev(s[:-1], acc + s[-1])
return throw(land, acc)
s = 'hallo' * 10000
for r in trampoline(rev, s):
print r
In specifications, Murphy's Law supersedes Ohm's.