簡體   English   中英

使用 Python 的斐波那契數列

[英]Fibonacci Sequence using Python

您好,我正在嘗試編寫一個腳本,提示用戶輸入 integer 數字 (n),然后按該順序打印所有小於或等於輸入的斐波那契數。 例子:

輸入一個數字:14

output 是: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)

這取決於您所說的“最有效的方式”是什么意思。 斐波那契是一個相當典型的編碼練習,大部分時間用於解釋遞歸。 例如,請參閱此答案

這種方式足夠高效,但你的代碼可以做得更好

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

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

我不太喜歡上面的方法,因為數字序列是無限的,而memory 分配不是。 因此,為了有效地獲得最高可能的可計算數字(當然是通過您的計算機),應該明確地使用生成器。

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)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM