Seite 1 von 1

iterativ programmieren

Verfasst: Freitag 26. November 2010, 20:09
von Jess240890
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

Re: iterativ programmieren

Verfasst: Freitag 26. November 2010, 20:14
von numerix
Code-Tags benutzen!

Kennst du Schleifen? Wenn ja: Benutze eine!
a·b ist doch nichts anderes, als z.B. a b-mal aufzuaddieren.

Re: iterativ programmieren

Verfasst: Freitag 26. November 2010, 22:22
von Jess240890
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

Re: iterativ programmieren

Verfasst: Freitag 26. November 2010, 22:31
von jbs
"Eine" Schleife bekomme ich hin:

Code: Alles auswählen

for i in range(10):
    print '*'*i

Generell machen wir keine keine Lösungen!

Re: iterativ programmieren

Verfasst: Freitag 26. November 2010, 22:35
von BlackJack
@Jess240890: Du bekommst das als Rekursion hin, aber nicht als einfache Schleife!? :shock:

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!?

Re: iterativ programmieren

Verfasst: Freitag 26. November 2010, 22:47
von Jess240890
diese schleife kriege ich auch hin. aber ohne mal kriege ich das net hin -.-

Re: iterativ programmieren

Verfasst: Freitag 26. November 2010, 22:50
von cofi

Code: Alles auswählen

for i in range(m):
    ...
Zwei Zeilen mehr und die loesung ist fertig.

Re: iterativ programmieren

Verfasst: Freitag 26. November 2010, 22:50
von DasIch
Sowas ist eigentlich sehr einfach, ganz ohne Operatoren zu verwenden ginge es z.B. so ;)

Code: Alles auswählen

from operator import add
from itertools import repeat

def mul(a, b):
    return reduce(add, repeat(a, b), 0)
EDIT: Von derdon genanntes Problem behoben durch setzen von `initial` auf 0.

Re: iterativ programmieren

Verfasst: Freitag 26. November 2010, 23:09
von Jess240890
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 :)

Re: iterativ programmieren

Verfasst: Freitag 26. November 2010, 23:12
von derdon
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

Re: iterativ programmieren

Verfasst: Samstag 27. November 2010, 13:01
von sma
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:

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
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:

Code: Alles auswählen

def mul_iter(m, n, a=0):
    return a if m == 0 else mul_iter(m - 1, n, a + n)
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.