Haskell 中的斐波那契数列 - 只有 return 值不超过用户输入值 NOT index
Fibonacci Sequence in Haskell - only return values up to a user input value NOT index
我见过很多 Haskell 程序,当用户输入 5 时,它会 return 斐波那契数列的前 5 个元素,但是,我需要它只输出斐波那契数列的值小于或等于 5 的序列。
例如:
Fib 15需要输出
1 1 2 3 5 8 13
Fib 7需要输出
1 1 2 3 5
这就是我所拥有的并且正在尝试更改以输出给定值而不是给定索引:
-- individual fib numbers
fib :: Int -> Int
fib 0 = 1
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)
-- example run fib 6 returns the int at position 6
-- so fib 6 = 13
-- combines individual fib numbers
fibonacciSequence x = map fib[1..x]
我尝试过的一些事情:
fibonacciSequence x = map (\x -> fib[1..] > x ) [1..]
y = filter (\y -> y > x) fib[1..x]
fibonacciSequence x = map (inRange (1,x)) [1..]
fibonaci g = map fst (iterate f (0,1)) where f (x,y) = (y,x+y) | f(y, x+y) <= g
我是 Haskell 的新手,非常感谢您的帮助!
而不是像这样编写生成有限序列的函数:
fibonacciSequence x = map fib [1..x]
写成无限序列往往更有用:
fibonacciSequence = map fib [1..]
然后您可以自由选择您想要的部分,对于前 n
个您可以使用的元素:
take n fibonacciSequence
如果您想要高达 n
的斐波那契数列,您可以这样做:
takeWhile (<= n) fibonacciSequence
我见过很多 Haskell 程序,当用户输入 5 时,它会 return 斐波那契数列的前 5 个元素,但是,我需要它只输出斐波那契数列的值小于或等于 5 的序列。
例如: Fib 15需要输出 1 1 2 3 5 8 13
Fib 7需要输出 1 1 2 3 5
这就是我所拥有的并且正在尝试更改以输出给定值而不是给定索引:
-- individual fib numbers
fib :: Int -> Int
fib 0 = 1
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)
-- example run fib 6 returns the int at position 6
-- so fib 6 = 13
-- combines individual fib numbers
fibonacciSequence x = map fib[1..x]
我尝试过的一些事情:
fibonacciSequence x = map (\x -> fib[1..] > x ) [1..]
y = filter (\y -> y > x) fib[1..x]
fibonacciSequence x = map (inRange (1,x)) [1..]
fibonaci g = map fst (iterate f (0,1)) where f (x,y) = (y,x+y) | f(y, x+y) <= g
我是 Haskell 的新手,非常感谢您的帮助!
而不是像这样编写生成有限序列的函数:
fibonacciSequence x = map fib [1..x]
写成无限序列往往更有用:
fibonacciSequence = map fib [1..]
然后您可以自由选择您想要的部分,对于前 n
个您可以使用的元素:
take n fibonacciSequence
如果您想要高达 n
的斐波那契数列,您可以这样做:
takeWhile (<= n) fibonacciSequence