Fibonacci Zahlen per C++ darstellen
-
int fibu(int n) { return .5 + pow( ( 1 + sqrt( 5. ) ) / 2, n + 1 ) / sqrt( 5. ); }
-
camper schrieb:
int fibu(int n) { return .5 + pow( ( 1 + sqrt( 5. ) ) / 2, n + 1 ) / sqrt( 5. ); }
... Musst aber double zurückgeben.
-
Mit der Umrechnungsformel von Kilometer nach Meilen kann man auch die nächste Fibonacci-Zahl berechnen.

-
FreakY<3Cpp schrieb:
... Musst aber double zurückgeben.Nö.
-
FreakY<3Cpp schrieb:
Xebov schrieb:
if(number==1 || number==2) { return 1; }; [e]rarr[/e] if(number <= 2) { return 1; }das haut aber nicht ganz hin, weil 1=1 2=1, 0=0 und unter 0 gibts nicht.
-
volkard schrieb:
FreakY<3Cpp schrieb:
... Musst aber double zurückgeben.Nö.
Gut, nicht unbedingt müssen, aber die Warnung
warning: converting to `int' from `double'
stört.
Xebov schrieb:
das haut aber nicht ganz hin, weil 1=1 2=1, 0=0 und unter 0 gibts nicht.
Das stimmt schon wie ich es geschrieben hab

-
Xebov schrieb:
das haut aber nicht ganz hin, weil 1=1 2=1, 0=0 und unter 0 gibts nicht.
Wer entgegen der Anleitung fib(0) oder fib(-5) aufruft, der bekommt was undefiniertes, das *darf* auch 1 sein.
-
Ich hatte es nur so gesehen das fib(0)=0 ist. Aber is ansich auch egal, man kanns ja so oder so ausrüsten und dem Ersteller gings ja nur um ne Lösung dafür.
-
skullyan schrieb:
Wie könnte man das sonst lösen?
da gibt es bestimmt einen ganzen Sack Möglichkeiten- z.B.:
#include <boost/iterator/iterator_adaptor.hpp> #include <iostream> template< typename T > struct basic_fibonacci : public boost::iterator_adaptor< basic_fibonacci< T >, T, const T, boost::bidirectional_traversal_tag > { basic_fibonacci() : iterator_adaptor_( T(1) ) , m_prev( T(0) ) {} void increment() { const T next = base() + m_prev; m_prev = base(); base_reference() = next; } void decrement() { const T prev2 = base() - m_prev; base_reference() = m_prev; m_prev = prev2; } typename super_t::reference dereference() const { return base_reference(); } private: T m_prev; }; typedef basic_fibonacci< int > Fibonacci; int main () { using namespace std; Fibonacci f; for( int n = 32; n; --n, ++f ) cout << *f << " "; cout << endl; for( ; *f > 0; --f ) // .. und rückwärts cout << *f << " "; cout << endl; return 0; }Gruß
Werner
-
Werner Salomon schrieb:
...Werner...
Ich liebe Werner für seine overpowered Lösungen

-
Wo wir schon dabei sind,
#include <iostream> template<unsigned x> struct fib { static unsigned long const val = fib<x - 1>::val + fib<x - 2>::val; }; template<> struct fib<1> { static unsigned long const val = 1; }; template<> struct fib<2> { static unsigned long const val = 1; }; int main() { std::cout << fib<10>::val << std::endl; }
-
seldon schrieb:
Wo wir schon dabei sind,
#include <iostream> template<unsigned x> struct fib { static unsigned long const val = fib<x - 1>::val + fib<x - 2>::val; }; template<> struct fib<1> { static unsigned long const val = 1; }; template<> struct fib<2> { static unsigned long const val = 1; }; int main() { std::cout << fib<10>::val << std::endl; }Hihi, auf sowas habe ich gewartet... hättest du das nicht gepostet hätte ich´s getan

-
seldon schrieb:
Wo wir schon dabei sind,
#include <iostream> template<unsigned x> struct fib { static unsigned long const val = fib<x - 1>::val + fib<x - 2>::val; }; template<> struct fib<1> { static unsigned long const val = 1; }; template<> struct fib<2> { static unsigned long const val = 1; }; int main() { std::cout << fib<10>::val << std::endl; }Das geht bei mir nur bis 48. Campers leicht abgewandelte Version:
double sqrt5 = sqrt(5.0); double golden_ratio = (1+sqrt5)/2; double fibu(int n) { return floor(0.5 + pow (golden_ratio, n+1)/sqrt5); }schaffts etwas weiter.

-
Der zeigt die zwei einsen am anfang nicht an, aber alles andere
int main (void) { int anzahl; cin >> anzahl; int n,k=1,j=1; cout << "-----" << endl; for (int i=0; i<anzahl; i++) { n=k+j; j=k; k=n; cout << k << endl; } }