求最小步變成斐波拉契數

2022-05-04 05:54:07 字數 587 閱讀 5351

題目描述

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數"

示例1輸入

15輸出

思路:生成斐波那契數列,每次生成就跟輸入的num對比,最終得到num左邊和右邊的斐波那契數與它的距離,從這兩個距離找最小那個。

function fibcount(num)  else 

}return math.min(left,right)

}

求第n個斐波拉契數

首先介紹斐波那契數列,斐波那契數列的排列是 1,1,2,3,5,8,13,21,34,55,89,144 依次類推下去,你會發現,它後乙個數等於前面兩個數的和。在這個數列中的數字,就被稱為斐波那契數。如果要找出其中任意乙個數,可以用下面兩種演算法解決 用遞迴法 define crt secure n...

快速求斐波拉契數列

首先,我們先計算如下的式子 f i f i 2 f i 1 f i 3 2f i 2 2f i 4 3f i 3 這時,我們假設當前為 f i a f j b f j 1 則是不是 f i a b f j 1 a f j 2 等等,係數是不是有點眼熟 1,1,2.a,b,a b 這不正是斐波拉契數列...

斐波拉契數列

斐波拉契數列 1 1 2 3 5 8 13 21 34.其中每乙個數字都是前兩個數字的和。遞迴計算 long fibonacci int n 非遞迴計算 long fibonacci int n return result 這個函式的遞迴實現使用了雙重遞迴 double recursion 函式對本...