Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

16.02.2006, 19:22

geschwindigkeit

also als erstes mal meine hauptfrage :D

ist es schneller sagen wir die fakultät von etwas per rekursion oder for schleife zu berechnen?

sollte man sich als guter programmierer solche fragen stellen?

weil ich habe noch keinen quelltext gesehn in dem zahlen mit

C-/C++-Quelltext

1
2
3
4
if((a_number & 1) != 0)
            // grade

        else
                       // ungrade


getestet werden

oder

C-/C++-Quelltext

1
zahl ^= zahl


um sie auf 0 zu setzen

macht der compiler das automatisch oder lohnt sich die gewonnene geschwindigkeit einfach nicht?

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

2

16.02.2006, 19:41

probiers aus
mach es einfach so 10e8 mal dann kriegste die zeitunterschiede
Was es alles gibt, das ich nich brauche - Aristoteles

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

3

16.02.2006, 19:45

Re: geschwindigkeit

Zitat von »"Sk!p"«


ist es schneller sagen wir die fakultät von etwas per rekursion oder for schleife zu berechnen?

Ich denke die for-Schleife wäre schneller.

Zitat von »"Sk!p"«


sollte man sich als guter programmierer solche fragen stellen?

Ja auf jeden Fall.. gerade in der Spieleprogrammierung kommts auf Geschwindigkeit und gutes Speichermanagment an.

Zitat von »"Sk!p"«


C-/C++-Quelltext

1
zahl ^= zahl


Das macht zahl^zahl und das ist nicht 0... nur mal so
und auch

C-/C++-Quelltext

1
zahl ^= 0
um zahl = 1 zu setzen wäre wohl langsamer als einfach zu schreiben zahl = 1.

Dave

Alter Hase

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

4

16.02.2006, 20:43

in der regel sind iterative lösungen wesentlich schneller als rekursive...

bassdscho

Alter Hase

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

5

16.02.2006, 22:32

bei komplexeren Problemen sind aber rekursive schneller, oder hab ich da was falsches gehört?
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

16.02.2006, 22:37

Generell ist ein rekursiver Aufruf langsamer, als eine iterative Variante, aber manche Probleme lassen sie nunmal besser rekursiv lösen :)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

17.02.2006, 12:09

Generell ist Iteration performanter als Rekursion. Da gibt es allerdings 'nen Trade-off in einigen Fällen zwischen Performance und Programmierfreundlichkeit.
Bei "linearen" Sachverhalten, wie beispielsweise Fakultät, sollte man stets Iteration benutzen. Bei Baumstrukturen bietet sich Rekursion an.
In einigen Fällen mag sogar Rekursion performanter sein als Iteration, aber generall ist es umgekehrt.

So Sachen, wie z.B. zahl^zahl solltest Du nicht machen, sofern Du nicht Assembler programmierst, denn sowas macht den Code unleserlich. Abgehesen davon führt der Compiler solche Optimierungen ganz von alleine durch.
Divisionen und Modulo-Operationen (bei 2er-Potenzen) kannst Du allerdings selbst durch sowas wie zahl & 1 (zahl % 2) oder zahl >> 5 (zahl / 32) ersetzen. Du kannst jedoch den Test auf 0 wie in Deinem Beispiel weglassen, weil das wäre wieder ein Schritt nach hinten. ;)

@Spik

C-/C++-Quelltext

1
zahl ^= zahl;
ergibt in jedem Fall 0, unabhängig davon, was zahl zuvor für 'nen Wert hatte.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

8

17.02.2006, 12:35

Tatsache! Aber in allen anderen Sprachen macht dieser Operator doch x exponent y. Wie gehtn das dann in C++?

Anonymous

unregistriert

9

17.02.2006, 12:39

C-/C++-Quelltext

1
2
3
#include <math.h>

int fuenf_quadrat = pow(5,2);


Grüße
Stefan

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

10

17.02.2006, 12:41

Danke! Gut, dass ich den Operator bisher noch nicht benutzt habe^^

Werbeanzeige