尋找斐波那契數

2021-08-25 08:59:25 字數 1033 閱讀 3644

fibonacci數列是這樣定義的:

f[0] = 0

f[1] = 1

for each i ≥ 2: f[i] = f[i-1] + f[i-2]

因此,fibonacci數列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在fibonacci數列中的數我們稱為fibonacci數。給你乙個n,你想讓其變為乙個fibonacci數,每一步你可以把當前數字x變為x-1或者x+1,現在給你乙個數n求最少需要多少步可以變為fibonacci數。

輸入為乙個正整數n(1 ≤ n ≤ 1,000,000)
輸出乙個最小的步數變為fibonacci數"
輸入:

輸出:

num = int(raw_input())

a = [0,1]

i = 2

while a[i-1] + a[i-2] <= 1000000:

i += 1

# print a

if num in a:

print 0

else:

for i in range(len(a)):

if a[i] > num:

loca = i

break

print min(a[loca] - num,num - a[loca-1])

上面的**對於每個示例都建立了最大的斐波那契數列,然而對於一些輸入較小的示例,顯然沒有必要簡歷全部的數列。考慮最後輸出結果時,只用到數目左右兩邊的斐波那契數,那麼簡歷從0到n的斐波那契數列也是沒有必要的。

num = int(raw_input())

an_1 = 1

an_2 = 0

while 1:

next = an_1 + an_2

if next >= num:

break

an_2 = an_1

an_1 = next

print min(next - num, num - an_1)

斐波那契數

入門訓練 fibonacci數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,...

斐波那契數

斐波那契數列 fibonacci sequence 簡介 斐波那契數列 fibonacci sequence 又稱 分割 數列 因 數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 ...

斐波那契數

遞迴演算法是不可取的。由於效率非常低,並且還有棧溢位的風險。應該使用例如以下的迭代解法 int fibonacci unsigned int n if n 1 int i 0,j 1,m unsigned int k for k 2 k n k return m 可是對於這題來說。上面的 還是不行的...