hallo liebe leute,
hoffe ihr könnt mir helfen.
ich muss ein iterativen alghorithmus erstellen um zwei zahlen mal nehmen zu können ohne die produktoperation " * " zu nutzen.
wie soll das gehen 0.o
den rekursiven teil habe ich geschaft:
def mul_rec (m,n):
if m > 0:
return mul_rec(m-1,n) + n
else:
return 0
iterativ programmieren
-
- User
- Beiträge: 6
- Registriert: Freitag 26. November 2010, 20:00
ja kenne ich, habe schon versucht eine zu erstellen, bin aber noch zu dumm dafür.
könntest du mir vielleicht eine basteln?
wäre sehr lieb von dir
LG
könntest du mir vielleicht eine basteln?
wäre sehr lieb von dir
LG
"Eine" Schleife bekomme ich hin:
Generell machen wir keine keine Lösungen!
Code: Alles auswählen
for i in range(10):
print '*'*i
Generell machen wir keine keine Lösungen!
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
@Jess240890: Du bekommst das als Rekursion hin, aber nicht als einfache Schleife!?
Warum habe ich das Gefühl die rekursive Lösung ist irgendwo abgeschrieben und Du bettelst hier so lange mit "ach ich bin ja so dumm" herum, bis Du eine Komplettlösung bekommst!?
Warum habe ich das Gefühl die rekursive Lösung ist irgendwo abgeschrieben und Du bettelst hier so lange mit "ach ich bin ja so dumm" herum, bis Du eine Komplettlösung bekommst!?
-
- User
- Beiträge: 6
- Registriert: Freitag 26. November 2010, 20:00
diese schleife kriege ich auch hin. aber ohne mal kriege ich das net hin -.-
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Code: Alles auswählen
for i in range(m):
...
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Sowas ist eigentlich sehr einfach, ganz ohne Operatoren zu verwenden ginge es z.B. so
EDIT: Von derdon genanntes Problem behoben durch setzen von `initial` auf 0.
Code: Alles auswählen
from operator import add
from itertools import repeat
def mul(a, b):
return reduce(add, repeat(a, b), 0)
Zuletzt geändert von DasIch am Freitag 26. November 2010, 23:15, insgesamt 1-mal geändert.
-
- User
- Beiträge: 6
- Registriert: Freitag 26. November 2010, 20:00
hahaha, habe erst jetzt die vorherige antwort gelesen.
die rekursieve loesung habe ich echt alleine hin bekommen, irgenwie hat es geklappt, aber wuerde nicht meine hand aufs feuer legen das ich es noch mal schaffe. war glueck.
aber danke dir, hast mir sehr geholfen.
jetzt wo ich dein beispiel sehe, merke ich dass meine loesung sehr nahr dran war, hatte das return vergessen und verstand net wieso mein programm nicht klappte.
so nun kann ich gelassen schlafen gehen. wuensche dir gute nacht
die rekursieve loesung habe ich echt alleine hin bekommen, irgenwie hat es geklappt, aber wuerde nicht meine hand aufs feuer legen das ich es noch mal schaffe. war glueck.
aber danke dir, hast mir sehr geholfen.
jetzt wo ich dein beispiel sehe, merke ich dass meine loesung sehr nahr dran war, hatte das return vergessen und verstand net wieso mein programm nicht klappte.
so nun kann ich gelassen schlafen gehen. wuensche dir gute nacht
DasIch:
Code: Alles auswählen
>>> mul(2,0)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 2, in mul
TypeError: reduce() of empty sequence with no initial value
>>> mul(0,2)
0
Die rekursive Lösung ist schon mal ein guter Anfang. Allerdings gelten nur endrekursive Lösungen als iterativ. Daher müssen wir sie umformen. Statt erst den rekursiven Aufruf und dann die Addition auszuführen, muss ein Akkumulator mit dem Ergebnis mitgeführt werden:
Ich persönlich finde die Kombination if/return/else/return jedoch nicht elegant. Das "else" ist redundant. Also entweder if/return/return oder am besten ein if-Ausdruck statt einer if-Anweisung. Ich glaube, ich drehe auch die Bedingung, damit der Funktionsaufruf hinten steht. Meine fertige Version:
Jetzt musst du nur noch deinem Lehrer glaubwürdig herleiten, warum dies eine gültige iterative Lösung ist.
Stefan
PS: Einen Bonuspunkt (von mir) gibt es, wenn du auch negative Zahlen multiplizieren kannst.
Code: Alles auswählen
def mul_iter(m, n, a=0):
if m > 0:
return mul_iter(m - 1, n, a + n)
else:
return a
Code: Alles auswählen
def mul_iter(m, n, a=0):
return a if m == 0 else mul_iter(m - 1, n, a + n)
Stefan
PS: Einen Bonuspunkt (von mir) gibt es, wenn du auch negative Zahlen multiplizieren kannst.