我有tu計算前n個斐波那契數的和。 fib函數返回第n個fibonnaci數。但我不知道如何總結只有第n個數字(正給定數量)前n個斐波那契數的和haskell
fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib x = fib (x-1) + fib (x-2)
sumFib :: Int -> Int
sumFib x = if x == fib x then x+fib x else fib x
我有tu計算前n個斐波那契數的和。 fib函數返回第n個fibonnaci數。但我不知道如何總結只有第n個數字(正給定數量)前n個斐波那契數的和haskell
fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib x = fib (x-1) + fib (x-2)
sumFib :: Int -> Int
sumFib x = if x == fib x then x+fib x else fib x
FIB發現第n Fibonacci數
fib :: Int -> Int
fib 0 = 0
fib 1 = 1
fib x = fib (x-1) + fib (x-2)
地圖」是標準映射函數的implemantation(我是不允許使用它)
map' :: (a -> b) -> [a] -> [b]
map' _ [] = []
map' f (x:xs) = f x : map' f xs
sumFib計算的總和前n個fibonnaci數字。
sumFib :: Int -> Int
sumFib x = sum (map' fib [1..x])
另一個很好的選擇是生成一個懶惰的功能給我們提供無限Fibonacci數的名單多達我們需要的。雖然我們可以通過很多遞歸技巧來實現這一點,但我相信Haskell的系列生成函數,即unfoldr
是理想的函數。下面的代碼將精美地爲我們生成一個儘可能多的斐波那契數列表,這些列表需要懶惰地進行。
fibs :: [Integer]
fibs = unfoldr (\(f,s) -> Just (f,(s,f+s))) (0,1)
現在我們要做的就是讓斐波納契數的總和達到給定的數。此時take
函數便於使用。 take
將採取列表的第一個n
項目。然後,我們需要做的就是將sum
函數應用於結果列表。
fibs :: [Integer]
fibs = unfoldr (\(f,s) -> Just (f,(s,f+s))) (0,1)
sumNFibs :: Int -> Integer
sumNFibs = sum . (flip take) fibs
*Main> sumNFibs 10
88
謝謝,事情是我不能使用這些函數,我被認爲是基本函數。 – Madalina
使用'fib'函數返回斐波那契數的無限列表(可以在線查看)。然後使用'sum(take n fib)' – 4castle
這是在這之前剛剛回答的:http://stackoverflow.com/questions/43883290/how-does-haskell-compute-this-enormous-number-instantly/43893466# 43893466 – Nykros
你知道'sum(Fib(1).. Fib(n))= Fib(n + 2)-1'嗎? –