Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fibonacci Zahlen auflisten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 <
020
10.05.2004, 18:24 Uhr
(un)wissender
Niveauwart


Mal an die Experten:

Wie kann ich es schaffen, das ich die fib-zahlen mit den templates bis eine mir bekannte Zahlen aucgeben lasse?


C++:
#include <iostream>
  
template<int n>
class fib
{
public:
    static const int value = fib<n-2>::value + fib<n-1>::value;
};

template <>
class fib<0>
{
public:
    static const int value = 0;
};

template <>
class fib<1>
{
public:
    static const int value = 1;
};

int main()
{  
   for(int i = 0; i < 20; ++i)
  {
     std::cout << fib<i>::value << std::endl; //So geht es nicht, obwohl der Compiler das eigentlich expandieren könnte...
  }
}



--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
10.05.2004, 18:36 Uhr
Pablo
Supertux
(Operator)


Am schnellsten geht das:


C++:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define wur5  (sqrt(5))

int fibo(int n) {
    return (1/wur5)*(pow(0.5*(1+wur5),n) - pow(0.5*(1-wur5),n));
}

int main(int argc, char** argv)
{
    if (argc!=2) return 1;
    printf("Das %d. Glied der Fibonacci Folge ist: %d\n", atoi(argv[1]), fibo(atoi(argv[1])));
    return 0;
}



Beweis: Induktion über n
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 10.05.2004 um 18:36 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
10.05.2004, 18:41 Uhr
(un)wissender
Niveauwart


Meins ist auf jeden Fall schneller, man muss nur die Zahl beim compilieren kennen, sonst geht es nicht.
Deines ist von den dynamischen Lösungen im mittel allerdings die beste.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
10.05.2004, 18:42 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@Pablo
obs wirklich schneller ist, müsstest du mal testen oder woher weisst du wie lange pow und sqrt brauchen...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 10.05.2004 um 18:43 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
10.05.2004, 20:14 Uhr
Pablo
Supertux
(Operator)


Da hast du Recht, aber ich bin da davon ausgegengen, dass sqrt und pow in O(1) laufen (ich weiß, dass es so nicht ist).
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
10.05.2004, 23:57 Uhr
(un)wissender
Niveauwart


Pablos ist im mittel scheller, gar keine Frage.


Bearbeitung von Pablo:

Ich hab meinen Namen richtig geschrieben


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 11.05.2004 um 00:05 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
11.05.2004, 08:52 Uhr
ao

(Operator)



Zitat:
Pablo postete

C++:
#include <math.h>
#define wur5  (sqrt(5))
int fibo(int n) {
    return (1/wur5)*(pow(0.5*(1+wur5),n) - pow(0.5*(1-wur5),n));
}




Fließkomma-Arithmetik einsetzen, um Fibonacci-Zahlen zu bestimmen? Pfui bah! ;-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
027
11.05.2004, 09:49 Uhr
virtual
Sexiest Bit alive
(Operator)


Kleine anmerkung;

C++:
#define wur5  (sqrt(5))


ist nur halb gut, besser wäre

C++:
const double long wur5 = sqrt(5.0);


Dann fällt die berechnung der Wurzel 5 weg, weil bereits ausgerechnet.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: