2

私はPythonとプログラミングを一緒に始めたばかりです。これは、初心者にとってフィボナッチ数を生成する非常に非効率的な方法ではないでしょうか?

a = 1
b = 1
total = 0
counter = input("Please enter the term you wish to end at: ")
print "1"
print""
print "1"
number = 2

while counter > number:
    total = a+b
    print ""
    print total
    a = b
    b = total
    number = number + 1

もしそうなら、誰かが次のようないくつかのことを指摘できますか:

私のコードをより効率的にするために何を調査するか/ Google。

私が取り組む必要があるプログラミング手法を提案してください (これは私の仕事の大きなサンプルではないことはわかっています)。

4

1 に答える 1

5

Pythonを使用すると、たとえばCの場合ほど効率を気にする必要はありませんが、BigOhの実行時間を最短にする必要があります。あなたがこれを書いた方法はあなたが得ることができるのと同じくらい効率的であるため、あなたはそれについてあまり心配する必要はありません。whileただし、を使用してカウンターに追加することは、あまりPython的ではありません。

これは、より簡単に次のように書くことができます。

a, b = 0, 1
counter = input("Please enter the term you wish to end at: ")
for _ in xrange(counter): #xrange is more efficient than range, the number is not used so _ is used to show that
    a, b = b, a+b
    print a
    print

このためにジェネレーターを使用することもできます。これは、作業できるプログラミング手法である可能性があります...

def fib(end):
    a, b = 0, 1
    for _ in xrange(end):
        a, b = b, a+b
        yield str(a)

counter = input("Please enter the term you wish to end at: ")    
print '\n\n'.join(fib(counter))
于 2012-06-02T09:00:43.853 に答える