【问题标题】:Fibonacci Sequence using Python使用 Python 的斐波那契数列
【发布时间】:2021-01-26 02:21:03
【问题描述】:

您好,我正在尝试编写一个脚本,提示用户输入一个整数 (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 还很陌生,正在做一些练习,但无法在教科书中找到解决方案。

【问题讨论】:

  • 按原样,它甚至没有运行。它还先打印 0
  • 它足够干净,如下答案,仅声明 2 个变量而没有 sum 不是编码约定的最佳实践。
  • 我找到了这个可以帮助你的:Look for the bottom-up approach in this post

标签: python while-loop anaconda fibonacci


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

像这样?

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

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

print(fib)

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

【讨论】:

  • 您进行了 2 次添加值,这根本不是很优化。
  • 是的,存储该总和可能会带来一些改进。在循环内打印到屏幕也不好,这就是我建议将序列存储在列表中的原因。
【解决方案3】:

我不太喜欢上面的方法,因为数字序列是无限内存分配不是。因此,为了有效地获得最高可能的可计算数字(当然是通过您的计算机),应该明确地使用 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% 崩溃,因为数字序列是无限的,并且您的计算机能力& 存储不是。

祝你好运。

【讨论】:

    猜你喜欢
    • 2013-08-03
    • 2013-02-24
    • 2014-05-23
    • 1970-01-01
    • 2015-06-05
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多