所以我试图为我的类编写一些代码,它将输出n步斐波那契序列中前k个项的int列表。
所以对于那些不了解的人来说,当你在它之前添加n个数字来获得下一个数字时,n步斐波那契序列是
so for n=1 it'd be 1,1,1,1,1,...
n=2, it'd be 1,1,2,3,5,...
n=3 it'd be 1,1,2,4,7...
我的方法是从基础案例开始,所以
let rec n_step n k=
if k=1 then [1] else
if n=1 then 1::nacci n k-1 else
但现在我被困在这里了。我知道我需要迭代并列出列表中的术语,但我不知道如何实现这一点。
我做了一个辅助函数和
let rec sum lst =
match lst with
| [] -> 0
| h::t -> h + sum t
我试图让它有选择地添加列表的最后n个数字以获得下一个值,但我也被卡住了
提前致谢!
答案 0 :(得分:1)
这是作业,所以我只建议一些步骤,而不是一个完整的解决方案:
应用这两条建议,第一步可能是:
let print_fib_2 () =
let previous_ref = ref (1, 1) in
for i = 0 to 10 do
let (a, b) = !previous_ref in
let next = a + b in
previous_ref := (next, a);
Printf.printf "%d\n" next
done
我首先概括使用更改n=2
到n=3
:对(a, b)
和(next, a)
会发生什么?在列表方面它意味着什么?
通过遵循工作示例中的婴儿步骤,您应该能够找到解决方案。
答案 1 :(得分:0)
我已经使用许多辅助函数来解决它。
所以我做了一个求和函数,用来总结列表中的值 一个收集函数,只能从整个列表中取n个值
然后在我的原始函数中,我使用k的模式匹配,这样如果k = 1,它将产生一个,否则它会递归。如果不是,我使用帮助
添加下一个值