Informatik
Buchtipp
Photoshop Wow!
L. Dayton, J. Davis
59.95 €

Buchcover

Anzeige
Stichwortwolke
forum

Zurück   ChemieOnline Forum > Naturwissenschaften > Informatik

Hinweise

Informatik Programmiersprachen, Softwareentwicklung.

Anzeige

Antwort
 
Themen-Optionen Ansicht
Alt 13.03.2015, 15:31   #1   Druckbare Version zeigen
chemie-held Männlich
Mitglied
Themenersteller
Beiträge: 879
Pseudocode Fakultät

Hallo,

wir sollten einen Pseudocode erstellen, um die Fakultät einer Zahl zu berechnen.

Ich habe jetzt den folgenden gefunden

algorithm fakult_reku(n)
Eingabe: Natürliche Zahl n >= 0
Ausgabe: n!
if n = 0
then return 1
if n = 1
then return 1
return fakult_reku(n - 1) * n

Ich frage mich jetzt nur, warum die Schleife nicht bei (n-1)*n auf hört?
Wann weiß der Pseudocode wann er aufhören soll? Wenn ich z.B. 5 eingebe dann sieht das für ich so aus
als wäre bei (5-1)*5 Schluss, ist es aber nicht?

lg
chemie-held ist offline   Mit Zitat antworten
Anzeige
Alt 13.03.2015, 19:05   #2   Druckbare Version zeigen
imalipusram  
Mitglied
Beiträge: 6.164
AW: Pseudocode Fakultät

Zitat:
Zitat von chemie-held Beitrag anzeigen
return fakult_reku(n - 1) * n
Wenn ich den Pseudocode richtig interpretiere ist es eine Rekursionsformel, die, sofern die ! für n>1 berechnet werden soll, das Problem auf die Fakultät von (n-1) abwälzt, die mit n multipliziert wird.

Die Rekursion ist natürlich theoretisch elegant, ob damit rechentechnisch was gewonnen wird, ist fraglich, denn neben der Multiplikation gibts noch potentielle Probleme mit Stack-Overflows (die Rekursionen müssen auch noch vom Programm verwaltet werden und erzeugen speichermäßig ziemlich viel Overhead). Ich würds einfacher so angehen und nur multiplizieren, das ist auf jeden Fall effizienter:

eingabe nichtnegativeganzzahl // kann man als "unsingned integer" realisieren
ausgabe ergebnis
ergebnis = 1
if (nichtnegativeganzzahl < 2) return ergebnis
zähler = 1
schleife solange zähler <=n
{
ergebnis = ergebnis * n
zähler = zähler +1
}
return ergebnis
fertig

Ein nettes Beispiel für sinnvollere Rekursionen sind die -> "Türme von Hanoi".
__________________
I solemnly swear that I'm up to no good!
伍佰 (WuBai - Run run run!) (ein Musikvideo mit dem Bambushaus und dem imalipusram unter den Statisten)
Noch ein nettes Video (nerdy, ein LIHA-Robot)
Und so gehts hier manchmal zu (sowas Ähnliches wie Fronleichnam, hier wird TuDiGong, dem Erdgott, tüchtig eingeheizt!) Oder so (auch ungeeignet für Gefahrstoffphobiker) und so und so.

Geändert von imalipusram (13.03.2015 um 19:14 Uhr)
imalipusram ist offline   Mit Zitat antworten
Alt 09.04.2015, 23:42   #3   Druckbare Version zeigen
chrisi1805  
Mitglied
Beiträge: 435
AW: Pseudocode Fakultät

imalipusram hat ja schon einiges geschrieben, aber vermutlich solltet ihr nur die Rekursion üben.

Ich hätte es über eine kleine Funktion gemacht:

int fakultaetberechnen(int n, int ergebnis){
if(n<2) return ergebnis;
else{ergebnis = ergebnis*n;
fakultaetberechnen(n-1, ergebnis);
}
}

Lese n ein;
fakultaetberechnen(n,1);
__________________
Falls etwas inhaltlich an meinen Beiträgen zu bemängeln sein sollte, bitte ich um konstruktive Verbesserung !
chrisi1805 ist offline   Mit Zitat antworten
Alt 20.05.2016, 19:45   #4   Druckbare Version zeigen
CyanideMarcus Männlich
Mitglied
Beiträge: 3
AW: Pseudocode Fakultät

Zitat:
Zitat von chrisi1805 Beitrag anzeigen
imalipusram hat ja schon einiges geschrieben, aber vermutlich solltet ihr nur die Rekursion üben.

Ich hätte es über eine kleine Funktion gemacht:

int fakultaetberechnen(int n, int ergebnis){
if(n<2) return ergebnis;
else{ergebnis = ergebnis*n;
fakultaetberechnen(n-1, ergebnis);
}
}

Lese n ein;
fakultaetberechnen(n,1);
Also das ist einer der bisher unsinnigsten Lösungen wenn man das mit Rekursion berechnen möchte.

das einfachste ist:

return (n>0)?(n*fak(n-1)):1;

iterativ:
int i = 1;
while(n>0)i*=n;
return n;


ich würde Grundsätzlich die iterative Lösung vorziehen, da hierbei die Rekursionstive umgangen wird, aber da bei fakultäten schnell der Datenbereich von long int überschritten wird, ist das eher nicht das Problem
CyanideMarcus ist offline   Mit Zitat antworten
Anzeige


Antwort

Lesezeichen

Themen-Optionen
Ansicht

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Pseudocode/Algorithmen chemie-held Informatik 3 12.01.2014 22:21
Fakultät Czarnapolka Mathematik 8 05.01.2009 22:19
Fakultät ultraslan47 Mathematik 5 28.12.2008 14:46
gross O notation für pseudocode ehemaliges Mitglied Mathematik 11 15.03.2004 00:00
Pseudocode ehemaliges Mitglied Informatik 4 24.09.2003 18:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:43 Uhr.



Anzeige