首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >负斐波那契数

负斐波那契数
EN

Code Golf用户
提问于 2016-12-31 10:43:52
回答 8查看 8.3K关注 0票数 32

你们可能都知道斐波纳契序列:

代码语言:javascript
运行
复制
fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)
fibonacci(0)=0
fibonacci(1)=1

您的任务尽可能简单:

  • 给定整数N计算fibonacci(n)

但这是一个转折:

  • 同时做负N

等。什么?

代码语言:javascript
运行
复制
fibonacci(1)=fibonacci(0)+fibonacci(-1)

所以

代码语言:javascript
运行
复制
fibonacci(-1)=1

代码语言:javascript
运行
复制
fibonacci(-2)=fibonacci(0)-fibonacci(1)=-1

等等..。

  • 这是一个密码-高尔夫,所以最短的程序以字节为单位获胜。
  • 您可以提交一个函数或完整的程序。
  • N在-100,100中

测试案例(S)在CSV:

代码语言:javascript
运行
复制
-9;-8;-7;-6;-5;-4;-3;-2;-1;0;1;2;3;4;5;6;7;8
34;-21;13;-8;5;-3;2;-1;1;0;1;1;2;3;5;8;13;21

提示:

n<0和n&1==0: fibonacci(n)=fibonacci(abs(n))*-1

EN

回答 8

Code Golf用户

发布于 2016-12-31 12:57:07

Mathematica,9字节

代码语言:javascript
运行
复制
Fibonacci

是的,这个内置函数支持负数.

票数 23
EN

Code Golf用户

发布于 2016-12-31 10:54:24

倍频程,20字节

代码语言:javascript
运行
复制
 @(n)([1,1;1,0]^n)(2)

在网上试试!

解释

这利用了fibonacci序列f(n)可以编写为(这应该是矩阵向量表示法)的事实:

递归地:

代码语言:javascript
运行
复制
[f(n+1)]  = [1  1] * [f(n)  ]
[f(n)  ]    [1  0]   [f(n-1)]

明文规定:

代码语言:javascript
运行
复制
[f(n+1)]  = [1  1] ^n * [1]
[f(n)  ]    [1  0]      [0]

这意味着,该矩阵的右上角项到n的幂值是我们正在寻找的值f(n)。显然,我们也可以反演这个矩阵,因为它有满秩,并且这个关系仍然描述相同的递推关系。这意味着它也适用于负输入。

票数 18
EN

Code Golf用户

发布于 2016-12-31 16:06:26

最大值,3字节

代码语言:javascript
运行
复制
 fib

支持正数和负数。

极大值在线上试用(粘贴)

票数 13
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/105183

复制
相关文章

相似问题

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