【发布时间】:2021-05-16 16:33:15
【问题描述】:
我一直在尝试在不使用惰性zipwith 方法的情况下实现从 0 到 n 的斐波那契数列列表。到目前为止,我所拥有的是从 n 返回列表到 1 的代码。有什么办法可以更改此代码,使其完全从 0-n 返回列表?
例子:
fib_seq 4 = [3,2,1,1]
-- output wanted: [1,1,2,3]
如果没有办法做我想让代码做的事情,有没有办法只返回斐波那契数字列表,再次输入一个数字 4 它将返回 [0, 1, 1, 2]。
fib_seq :: Int -> [Int]
fib_seq 0 = [0]
fib_seq 1 = [1]
fib_seq n = sum (take 2 (fib_seq (n-1))) : fib_seq (n-1)
【问题讨论】:
-
最好使用 let,
fib_seq2 n = let { fs = fib_seq2 (n-1) } in sum (take 2 fs) : fs。比较fib_seq 30的速度。