SORU
30 Ocak 2009, Cuma


Nasıl Python Fibonacci Dizisi yazmak

Aslında yanlış kodlanmış bir program vardı. Bir dizi (yani. arasındaki Fibonacci sayıları döndürmek yerine startNumber 1, 20 endNumber gerekir = 1 ve 20 arasındaki tek sayılar), program bir dizi (yani. arasındaki tüm Fibonacci sayıları görüntülemek için yazdım startNumber 20 20 Fibonacci sayılarının İlk = görüntüler endNumber 1,). Kesin bir kod var sanıyordum. Ben de bunun neden görmüyorum.

startNumber = int(raw_input("Enter the start number here "))
endNumber = int(raw_input("Enter the end number here "))

def fib(n):
    if n < 2:
        return n
    return fib(n-2)   fib(n-1)

print map(fib, range(startNumber, endNumber))

Birisi startNumber geçmek ve bir jeneratör süre döngü kullanmak endNumber gerekiyor o Kısmı benim II - http://stackoverflow.com/questions/504193/how-to-write-the-fibonacci-sequence-in-python-part-ii kopyası olduğu için kapatıldı) işaret etti. Birisi bunu yapmak için nasıl yönde bana gelin misiniz? Herhangi bir yardıma açığız.


Öğrenme bir programcı değilim ve karmakarışık bir yaşadım. Ve kullanıcı girilen bir sayı ile ben Fibonacci hesaplama görüntülemek ve numarası (örn. bir program yazmak için ricada bulunuyorum = 20 endNumber = 100 startNumber ve dizi arasındaki tek sayılar ekran). Hile kullanmaktır sınırlarını (ki ben Python yapmak için nasıl bilmiyorum? - Bunun anlamı da dahil bir dizi kullanmak için?) olduğunu varsayıyorum.

Ne ben, şimdiye kadar hiç gerçek bir kod ama değil

  • Fib sıra formül sonsuz yaz
  • StartNumber sadece Yalan dizisi endNumber ekran.

Başlatmak ve bunu yazmak için nasıl bir fikir veya fikir soran nerede olduğum hakkında hiçbir fikrim yok. Ben de Fib sıra forumla yazmayı denedim ama o da kayboluyorum.

Yardımın için teşekkür ederim. Aktif olarak bu soruya katılan ve HERHANGİ bir yardım takdir edecektir.

CEVAP
31 Ocak 2009, CUMARTESİ


wolfram wikipedia Fibonacci Dizisi hakkında pek çok bilgi var. Bir çok ihtiyacınız olabilir daha fazla. Zaten bu kaynak neye ihtiyacınız hızlı bir şekilde (mümkünse) bulmak için kullanmayı öğrenmek için iyi bir şeydir.

Fib sıra formül sonsuz yaz

Matematik özyinelemeli bir biçimde verilen bir şey

fibonacci from wikipedia

Programlamasonsuzyok. Olur python özyinelemeli formu matematik şeklinde çevriliyor doğrudan örneğin dilinizde kullanabilirsiniz:

def F(n):
    if n == 0: return 0
    elif n == 1: return 1
    else: return F(n-1) F(n-2)

Favori dili deneyin ve bu form gerektirirbir sürün büyüdükçe zaman, aslında bu O. (2nzamanla.

Siteler sana bağlı gidip bunu görecek (wolfram):

alt text

Bu uygulamak çok kolay ve Python hesaplamak için çok çok hızlı

from math import sqrt
def F(n):
    return ((1 sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))

Bunu yapmanın başka bir yolu tanımı aşağıdaki (wikipedia):

Dizinin ilk sayısı 0, ikinci Sayı 1, ve her sonraki sayı toplamına eşittir önceki iki sayının kendisinden, sıra oluşturan 0, 1, 1, 2, 3, 5, 8, vb.

Eğer dil kullanımına destekliyorsa, gibi bir şey yapabilirsiniz:

def F():
    a,b = 0,1
    yield a
    yield b
    while True:
        a, b = b, a   b
        yield b

StartNumber sadece Yalan dizisi endNumber ekran.

Fibonacci Sayıları oluşturmak için nasıl bilmek kez sadece yalak sayıları döngüsü ve belirli koşulları doğrulamak olmadığını kontrol edin.

Sanırım artık Fibonacci Dizisi (Karekök(5) gibi) n-inci terim döndüren bir f(n) yazdı

Çoğu dilde bir şey gibi yapabilirsiniz:

def SubFib(startNumber, endNumber):
    n = 0
    cur = f(n)
    while cur <= endNumber:
        if startNumber <= cur:
            print cur
        n  = 1
        cur = f(n)

Python yineleyici formu kullanmak ve için gitmek istiyorum:

def SubFib(startNumber, endNumber):
    for cur in F():
        if cur > endNumber: return
        if cur >= startNumber:
            yield cur

for i in SubFib(10, 200):
    print i

Benim ipucuokumayı öğreninihtiyacın olan şey. Project Euler () bunun için google size çok şey öğretecek :P İyi şanslar ve eğlenin!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Easy Learn Tutorial

    Easy Learn T

    10 Kasım 2012
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011
  • TheDroidDemos

    TheDroidDemo

    15 ŞUBAT 2011