Problem mit str und int
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
@Eydu: stimmt natürlich
Gibt es eigentlich irgendeine Anwendung für Fibonacci-Zahlen?
Code: Alles auswählen
In [1]: def get_fibo():
...: a, b = 0,1
...: while True:
...: a, b = b, a + b
...: yield a
...:
In [2]: import itertools
In [3]: l = list(itertools.takewhile(lambda n: n<1000, get_fibo()))
In [4]: l
Out[4]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
Gibt es eigentlich irgendeine Anwendung für Fibonacci-Zahlen?
@b.esser-wisser: `itertools.islice()` ist IMHO weniger umständlich als `takewhile()` + ``lambda``.
Fuer grosse n stoesst Du aber schnell an die Grenzen Deines PCs. In diesem Dokument http://www.mathematik.uni-muenchen.de/~ ... zth_01.pdf ist eine Methode beschrieben mit der man fib(n) wesentlich schneller berechnen kann. Mal nach der 2x2 Matrix mit den drei Einsen und der einen Null suchen. Ist auch eine schoene Uebung das mal umzusetzen.
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
@BlackJack: da hatte ich irgendwie nicht dran gedacht - mein Gedankengang war an 'nimm solange zahl kleiner n' hängengeblieben :K
@hendrikS:
Das ginge dann so, oder?
Um für jeden Spatz die passende Kanone zu haben
scnr, Jörg
@hendrikS:
Das ginge dann so, oder?
Code: Alles auswählen
import itertools
import numpy as np
def fibo():
fibo_matrix = np.matrix([[1., 1.0], [1., 0.]])
akku = fibo_matrix.copy()
fibo_matrix **= 3
exponent = 2
while True:
yield akku[1,1]
yield akku[0,1]
yield akku[0,0]
akku *= fibo_matrix
for n in itertools.islice(fibo(), 1000): #hart an der grenze von 'float'
print n
scnr, Jörg
Ja genau, Prinzip erkannt. Deine Lösung hat aber ein paar Schönheitsfehler. Ich hatte mich gefragt warum Du floats verwendest, wo man doch auschliesslich addiert oder multipliziert. Bis ich dann gesehen habe, dass bei grösseren Exponenten negative Werte rauskommen. Ist n'bisschen doof.b.esser-wisser hat geschrieben:@hendrikS:
Das ginge dann so, oder?
Also die Challenge ist dann, die Funktion selber zu schreiben, die sozusagen [[1,1],[1,0]]**n berechnet.
Edit: Wenn Du alle fibs von 1..n berechen möchtest, ist der vorherige Algo natürlich besser. Macht so nur sinn wenn man einzelne bestimmte Fibozahlen bestimmen möchte. Insofern ist wahrscheinlich auch Dein Generator überflüssig.
Wer Spaß an großen und kleinen Fibonacci-Zahlen, an schnellen und kurzen Algorithmen zur Berechnung von Fibonacci-Zahlen hat und sich mal so richtig austoben möchte der kann das z.B. hier tun:
- Fibonacci Numbers (Golf)
- Flibonakki
- How Many Fibs
- Fibonacci Sequence
- Fibonacci Factor
- Interesting Determinant
- The Very Greatest Common Divisor
- Counting Rabbits
- Sum of Products
- Fibonacci Numbers (Golf)
- Flibonakki
- How Many Fibs
- Fibonacci Sequence
- Fibonacci Factor
- Interesting Determinant
- The Very Greatest Common Divisor
- Counting Rabbits
- Sum of Products
Und das:numerix hat geschrieben:Wer Spaß an großen und kleinen Fibonacci-Zahlen, an schnellen und kurzen Algorithmen zur Berechnung von Fibonacci-Zahlen hat und sich mal so richtig austoben möchte der kann das z.B. hier tun:
- Alphacode