首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ocaml中展开的Fibonacci序列

问Ocaml中展开的Fibonacci序列
EN

Stack Overflow用户
提问于 2017-10-31 01:13:41
回答 1查看 1.1K关注 0票数 0

我对Ocaml比较陌生,我认为我对展开函数的理解是正确的,但我只是不知道如何使用它来生成fibonacci序列。我们不需要有最后两个值的holder变量才能找到当前的值吗?我们非常感谢所有的帮助。我正在添加下面的展开函数以供参考。

代码语言:javascript
复制
let rec unfold (f: 'seed -> ('a * 'seed)) (stop : 'b -> bool) (b :'seed) : 'a list =
if stop b then []
else 
  let x, b' = f b in
   x :: (unfold f stop b')
EN

回答 1

Stack Overflow用户

发布于 2017-10-31 01:23:15

您对存储最后两个值以创建下一个值的想法是正确的。诀窍是把它们储存在一个元组里。

生成器函数接受元组,返回第一个数字作为生成的值,并使用第二个元组数和下一个fibonacci数创建一个新的状态:

代码语言:javascript
复制
fun (a, b) -> (a, (b, a+b))

停止函数只接受元组并决定何时停止。

代码语言:javascript
复制
fun (a, b) -> a > 1000

第一个状态是(0, 1),这是前两个斐波那契数。

把所有东西放在一起:

代码语言:javascript
复制
# unfold (fun (a, b) -> (a, (b, a+b))) (fun (a, b) -> a > 1000) (0, 1);;
- : int list =
[0; 1; 1; 2; 3; 5; 8; 13; 21; 34; 55; 89; 144; 233; 377; 610; 987]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47026495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档