python – 在一个表达式中打印前n个斐波那契数列

python – 在一个表达式中打印前n个斐波那契数列,第1张

概述所以我最近一直在搞乱 Python,我正试图找到一种方法在单个表达式中输出第n个斐波纳契数列.这是我到目前为止编写的代码: (lambda f: f if f<2 else (f-1)+(f-2))(n)# n == 1 -> 1# n == 2 -> 1# n == 3 -> 3# n == 4 -> 5# n == 5 -> 7.... 但是,正如我在上面评论的那样,它只输出一组奇 所以我最近一直在搞乱 Python,我正试图找到一种方法在单个表达式中输出第n个斐波纳契数列.这是我到目前为止编写的代码:
(lambda f: f if f<2 else (f-1)+(f-2))(n)# n == 1 -> 1# n == 2 -> 1# n == 3 -> 3# n == 4 -> 5# n == 5 -> 7....

但是,正如我在上面评论的那样,它只输出一组奇数.我很困惑为什么会发生这种情况,因为如果我要将其重新编写为命名的lambda函数,它看起来像这样:

f = lambda n: n if n<2 else f(f-1)+f(f-2)# f(1) -> 1# f(2) -> 1# f(3) -> 2# f(4) -> 3...# f(10) -> 55...

现在我添加Lambda Calculus标签的原因是因为我不确定这个问题是否属于简单理解Python如何处理这个问题的范畴.我已经阅读了一些关于lambda演算中Y组合子的内容,但这对我来说是一种外语,无法从我发现的有关lambda演算的资源中得到任何东西.

现在,我试图在一行代码中执行此 *** 作而不是命名它的原因是因为我想尝试将此lambda函数放入列表理解中.所以做这样的事情:

[(lambda f: f if f<2 else (f-1)+(f-2))(n) for n in range(10)]

并在斐波纳契数列中创建前x个数字的数组.

我正在寻找的是一种在一个表达式中完成这一切的方法,并且它应该属于Lambda演算的范畴,我相信它确实存在,有人可以解释这是如何工作的.

随意提供JavaScript,C#或支持Lambda函数的其他类C语言的答案.

编辑:我找到了我试图做的解决方案:

[(lambda f: (lambda x: f(lambda v: x(x)(v)))(lambda x: f(lambda v: x(x)(v))))(lambda f:(lambda n: n if n<2 else f(n-1)+f(n-2)))(y) for y in range(10)]

我知道这根本不实用,不应该使用这种方法,但我关心的是我这样做,而不是我应该这样做.

解决方法 怎么样:
(lambda f: (4 << f * (3 + f)) // ((4 << 2 * f) - (2 << f) - 1) & ((2 << f) - 1))(n)

它不会以通常的方式启动序列:

0,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,...

但是一旦你超过1,你就没事了.您可以在博客条目An integer formula for Fibonacci numbers中找到详细说明以及大量相关信息.

在我的系统上,@ lehIEster的基于黄金比率的解决方案在F71上脱轨,产生308061521170130,而不是308061521170129并继续偏离那里.

总结

以上是内存溢出为你收集整理的python – 在一个表达式中打印前n个斐波那契数列全部内容,希望文章能够帮你解决python – 在一个表达式中打印前n个斐波那契数列所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存