racket - 如何使用抽象列表函数在球拍中制作斐波那契数列
问题描述
我正在尝试编写一个球拍程序,它在不使用递归的情况下计算斐波那契数列中前 n 项的总和,并且只使用抽象列表函数(如 map、builld-list、foldr、foldl)。我可以使用辅助功能。我被困在如何在不使用递归的情况下制作斐波那契数列。我以为我可以使用 lambda 函数:
(lambda (lst) (+ (list-ref lst (- (length lst) 1)) (list-ref lst (- (length lst 2)))))
但我不确定如何生成输入列表/如何将其添加到函数中。一旦我有了斐波那契数列,我就知道我可以使用 (foldl + (car lst) (cdr lst)) 来求和。谁能向我解释如何制作斐波那契数列/给我一个提示?
解决方案
; This is how I figure out
#|
(1 2 3 4 (0 1))
-> (1 2 3 (1 1))
-> (1 2 (1 2))
-> (1 (2 3))
-> (3 5)
|#
(define (fib n)
(cond
[(= n 0) 0]
[(= n 1) 1]
[(> n 1)
(second
(foldr (λ (no-use ls) (list (second ls) (+ (first ls) (second ls))))
'(0 1)
(build-list (- n 1) (λ (x) x))))]))
(fib 10)
(build-list 10 fib)
升级版本 2
(define (fib-v2 n)
(first
(foldr (λ (no-use ls) (list (second ls) (+ (first ls) (second ls))))
'(0 1)
(build-list n (λ (x) x)))))
(build-list 10 fib-v2)
推荐阅读
- android - 具有第三方库的动态功能,其清单中有一个带有自定义主题的活动 - 找不到资源
- testing - RobotFramework 使用 robotframework-imaplibrary2 打开电子邮件链接
- django - 没有重定向到 Django 中的主页。将 http://127.0.0.1:8000/home/connect/jhvjhb/3 放入 url
- javascript - VueJS / v-html 显示空白页面(Bokeh-html)
- c++ - 如果包含地图的静态库与可执行和动态库链接,静态地图(变量)会被多次释放吗?
- javascript - 在 Node.js 中请求信息时延迟承诺请求
- python - 使用 python 列出 Google Cloud Platform 中特定项目中的角色
- angular - 动态 canDeactivate Guard:在离开带有更改的表单之前显示确认消息
- php - 在 laravel 5 视图中反序列化一列数据的正确方法是什么
- buffer - 如何在 OpenCL 中使用 clEnqueueWriteBufferRect