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

如果是这样,有人可以指出一些事情,例如:

研究什么/谷歌让我的代码更有效率。

建议我需要进行的编程实践(我知道这不是我工作的大量样本)。

4

1 回答 1

5

使用 python,您不必像在 C 中那样担心效率,尽管您仍然希望实现最短的 Big Oh 运行时间。您编写此内容的方式尽可能高效,因此您无需担心太多。while但是,使用添加到计数器并不是很pythonic 。

这可以更简单地写成:

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 回答