我们都熟悉斐波那契数列:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765
但是,相反,f(n) = f(n-1) + f(n-2)
我们将对前2个条目进行数字求和。
序列应仍以开头0, 1
,之后差异会迅速显现。此列表的索引为0,也可以使用索引为1的状态。
f(0) = 0
f(1) = 1
f(2) = 1 # 0 + 1
f(3) = 2 # 1 + 1
f(4) = 3 # 1 + 2
f(5) = 5 # 2 + 3
f(6) = 8 # 3 + 5
f(7) = 13 # 8 + 5
f(8) = 12 # 8 + 1 + 3
f(9) = 7 # 1 + 3 + 1 + 2
f(10) = 10 # 1 + 2 + 7
f(11) = 8 # 7 + 1 + 0
f(12) = 9 # 1 + 0 + 8
f(13) = 17 # 8 + 9
f(14) = 17 # 9 + 1 + 7
f(15) = 16 # 1 + 7 + 1 + 7
f(16) = 15 # 1 + 7 + 1 + 6
f(17) = 13 # 1 + 6 + 1 + 5
f(18) = 10 # 1 + 5 + 1 + 3
f(19) = 5 # 1 + 3 + 1 + 0
f(20) = 6 # 1 + 0 + 5
f(21) = 11 # 5 + 6
f(22) = 8 # 6 + 1 + 1
f(23) = 10 # 1 + 1 + 8
f(24) = 9 # 8 + 1 + 0
f(25) = 10 # 1 + 0 + 9
f(26) = 10 # 9 + 1 + 0
f(27) = 2 # 1 + 0 + 1 + 0
(After this point it repeats at the 3rd term, 0-indexed)
注意:在发布挑战之前,我没有注意到重复的发生,在这里我想写另一本新颖的斐波那契挑战是不可能的。
给您的任务一个数字n
,输出此序列的第n个数字。
前3位数字:[0,1,1]
,
24位重复模式: [2,3,5,8,13,12,7,10,8,9,17,17,16,15,13,10,5,6,11,8,10,9,10,10]
提示:您也许可以利用此重复方法来获得好处。
这是代码高尔夫球,最低字节数是获胜者。
奖励:如果您在答案中使用重复,我将奖励利用顺序中重复的最低字节数答案,赏金为100分。该答案应在原始答案之后作为原始答案的一部分提交。看到这篇文章作为我正在谈论的例子:https : //codegolf.stackexchange.com/a/108972/59376
要获得此奖金,您的代码必须在固定时间(O(1)
)内运行并附带说明。
奖金获胜者:丹尼斯https://codegolf.stackexchange.com/a/108967/59376 <丹尼斯赢得了。
最独特的实现:https : //codegolf.stackexchange.com/a/108970/59376
(也将获得100分,在选择正确答案后最终确定)
%24
到“常规”解决方案中?
O(1)
。如果您的代码确实在利用重复,那么它应该在恒定的时间内运行。