我是这么实现斐波那契数列的

2017-01-03 16:21:15 +08:00
 Jakesoft

实习时面试面到这个问题,当时还不知道斐波那契数列,讲给同学听时,他说,这不就是斐波那契数列吗?! (尴尬脸)

然后这是我面试的回答:

$total = [0, 1];

for ($i = 2; $i < 100; $i++)
{
	$total[] = $total[$i - 1] + $total[$i - 2];
}

今天看到别人(书本)的实现,需要定义几个变量来交换当前值、上一个值,感觉好麻烦。

还有我的代码应该没啥问题吧

5973 次点击
所在节点    PHP
48 条回复
raysonx
2017-01-03 18:45:21 +08:00
话说如果只是要求求出某一个 Fibonacci 数而不是整个数列的话,可以直接用公式在 O(1)的时间内求得。
xiaopc
2017-01-03 18:58:05 +08:00
@Kilerd 线性递推先构造出矩阵,然后用矩阵乘法结合律降次
SplendentDraco
2017-01-03 19:00:09 +08:00
我记得高一时上课时无聊吧这玩意儿通项公式求出来了。。😂
choury
2017-01-03 19:02:57 +08:00
@raysonx 公式里面全是无理数,计算机直接算不好吧
Kilerd
2017-01-03 19:06:41 +08:00
@loggerhead 重复平方,我懂。

@Contextualist @xiaopc GET 到了。 矩阵方法确实神奇。 至于代数方法,感觉是像是把矩阵方法拆开些而已。

完蛋了,现在看博客都专心不了了。
chuanqirenwu
2017-01-03 19:09:52 +08:00
这个面试比较蛋疼,他是要考察你什么呢?斐波拉契数列的定义?还是高效的代码实现?
Cbdy
2017-01-03 19:15:37 +08:00
@raysonx 我想了一下没想出来怎么在 O(1)时间内求出来。通项是无理数,比如 n 很大,算出来的精度就很可疑了。有什么好方法吗? O(1)
blackjar
2017-01-03 19:15:38 +08:00
@q397064399 尾递归打开优化 没区别
Jakesoft
2017-01-03 19:38:30 +08:00
@GPIO 可能是忘记了吧,不过大学确实很少上课。。。
h4x3rotab
2017-01-03 19:40:01 +08:00
@Cbdy 快速矩阵幂, O(logn)
Jakesoft
2017-01-03 19:42:18 +08:00
@chuanqirenwu 应该是如何实现“后面一个数等于前两个数之和”吧,至于如何高效实现我还需要花点功夫。
manongvpn
2017-01-03 19:45:22 +08:00
会 Google ,你就离大牛近了一步。
bdbai
2017-01-03 20:06:04 +08:00
@loggerhead 弱弱问一下,你的博客文章中矩阵为什么乘在向量的右边?
CFM880
2017-01-03 20:17:51 +08:00
看下 sicp 里面就有,树形递归和线性迭代,书上讲两种过程的优缺点说的很清楚
j5shi
2017-01-03 20:21:53 +08:00
@q397064399 这么浅显的问题要是面试官顺着你的思路真的问了那只能恭喜你局面被你控制了😄
loggerhead
2017-01-03 20:35:47 +08:00
@bdbai 这不是矩阵乘法吗? 1x2 乘以 2x2 的矩阵 = 1x2 的矩阵。你可以看看这个: http://www.ruanyifeng.com/blog/2015/09/matrix-multiplication.html
owt5008137
2017-01-03 21:09:19 +08:00
用矩阵,斐波那契的复杂度是 O ( log ( n ))
ZRS
2017-01-03 21:20:33 +08:00
用通项公式...
q397064399
2017-01-04 08:15:44 +08:00
@j5shi 我会说很多程序员 并不知道 程序堆栈这回事么?
longhao
2017-01-04 09:21:56 +08:00
@q397064399 尝试尾递归呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/331932

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX