使用 Python 的斐波那契数列

Fibonacci Sequence using Python

你好,我正在尝试编写一个脚本,提示用户输入一个整数 (n),然后按该顺序打印所有小于或等于输入的斐波那契数。 示例:

输入一个数字:14

输出为:1 1 2 3 5 8 13

这是我目前的方法,但不确定这是否是最有效的方法?它工作正常,但我想知道是否有更简单的方法来清理它..

n = int(input("Enter a number: "))
a = 0
b = 1
sum = 0


while(sum <= n):
 print(sum, end = " ")
 count += 1
 a = b
 b = sum 
 sum = a + b

print(end = " ")

我是 python 的新手,正在做一些练习,但无法在教科书中找到解决方案。

是这样的吗?

n = int(input("Enter a number: "))

fib = [0, 1]
while fib[-1] + fib[-2] <= n:
    fib.append(fib[-1] + fib[-2])

print(fib)

这取决于您所说的“最有效方式”是什么意思。 Fibonacci 是一个相当典型的编码练习,大部分时间用于解释递归。例如,参见 this answer

这种方式足够高效,但您的代码可以做得更好

n = int(input("Enter a number: "))
a = b = 1

while(b <= n):
 print(b, end = " ")
 a, b = b, a + b

我不太喜欢上面的方法,因为数字序列是 无限 内存分配 不是。因此,为了有效地获得尽可能多的可计算数字(当然是通过您的计算机),应该明确地使用 generators.

ITERATIONS = 100
def fibo():
     a, b = 0, 1
    
     while True:
         a, b = b, a + b
         yield b

f = fibo()

for _ in range(ITERATIONS):
     print(next(f))

! 但请记住,如果您尝试 list(f) 之类的操作,您的计算机将 100% 崩溃数字序列是无限的,而您的计算机电源和存储空间不是。

祝你好运。

感谢tboschi。他的代码帮我解决了这个问题。

# fibonacci_list = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, ...]
fibonacci_list = [0, 1]
for value in fibonacci_list:
    if value < 1000000:
        new_value = fibonacci_list[-1] + fibonacci_list[-2]
        fibonacci_list.append(new_value)

def fibonacci(n):
    # Type your code here. 
    if n >= 0: 
        for index_num in range(len(fibonacci_list)):
            if n == index_num:
                return fibonacci_list[index_num]
    else:
        return -1

if __name__ == '__main__':
    start_num = int(input())
    print('fibonacci({}) is {}'.format(start_num, fibonacci(start_num)))