Aev*_*eus 3 haskell list-comprehension
我目前仍然坚持在列表推导中设置上限.
我要做的是找到低于一百万的所有斐波纳契数.为此我设计了一个相当简单的递归Fibonacci函数
fib :: Int -> Integer
fib n
n == 0 = 0
n == 1 = 1
otherwise = fib (n-1) + fib (n-2)
Run Code Online (Sandbox Code Playgroud)
我坚持的事情是定义一百万个部分.我现在得到的是:
[ fib x | x <- [0..35], fib x < 1000000 ]
Run Code Online (Sandbox Code Playgroud)
这是因为我知道Fibonacci序列中的第35个数字足够高.但是,我想要的是通过一个函数找到这个限制并设置它.
[ fib x | x <- [0..], fib x < 1000000 ]
Run Code Online (Sandbox Code Playgroud)
这确实给了我数字,但它根本不会停止.这导致Haskell试图在序列中找到进一步低于一百万的斐波纳契数,这是相当无效的.
任何人都可以帮我解决这个问题吗?非常感谢!
ant*_*kos 10
fib x < 1000000列表推导中的检查过滤掉fib x小于1000000 的值; 但是列表理解无法知道更大的价值x意味着更大的价值,fib x因此必须继续,直到所有的x都被检查.
takeWhile改为使用:
takeWhile (< 1000000) [ fib x | x <- [0..35]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |