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

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];
}

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

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

6586 次点击
所在节点    PHP
48 条回复
q397064399
2017-01-04 09:31:07 +08:00
@longhao 主要看汇编层面的优化吧,毕竟生成机器码,底层是怎么运作的,高级语言很难解释清楚
一般是不推荐使用过深的递归,
MayLava
2017-01-04 11:03:30 +08:00
说到斐波那契数列,大家肯定记得“生兔子问题”。题目很绕。

一只小兔子,出生三个月变大兔子,变成大兔子后每个月生一只小兔子;
小兔子三个月后也能变成大兔子开始生小兔子。
问 n 个月后一共有几只兔子。

我完全被搞蒙了——这尼玛什么鬼。
我还觉得这题目有歧义啊,比如说长成大兔子的当月就能生小兔子吗还是下个月才能生小兔子。
你想啊,这个月长成大兔子,难道不需要怀胎一个月吗?
然后生兔子我们是不是按一半男一半女算?两只兔子一个月生一只才对吧?
然后我还在想兔子真的繁殖能力这么强吗?

然后我画了一下午“生兔子”的图。
然后我还用了各种奇怪的方法模拟兔子成长过程什么的,总之这题没写出来。

后来才知道这就是斐波那契数列。迭代 a, b = b, a + b 就行了。
然后我就觉得,要考斐波那契就老老实实的说你要考斐波那契,我会就是会,不会我就学。
求你不要搞些奇奇怪怪的描述来忽悠人了😂😂😂😂
bdbai
2017-01-04 18:22:32 +08:00
@loggerhead 按照阮老师的写法,变换矩阵乘在向量左边的,高中数学书上也这么写......
loggerhead
2017-01-04 19:58:03 +08:00
@bdbai 没搞懂你什么意思……矩阵乘法不满足交换律的,所以如果我写反了,那么我就写错了,但是我仔细看了看,好像没问题啊……
bdbai
2017-01-04 20:23:01 +08:00
@loggerhead 抱歉我看错了,原来是横着写的😂
loggerhead
2017-01-04 21:44:02 +08:00
@bdbai 哈哈😂
yzhen123
2017-01-05 08:53:53 +08:00
@MayLava 这种题目考察的是语言理解能力,这么 简单的描述都没看懂,以后读产品经理的需求怎么办?(手动滑稽
ryd994
2017-01-05 11:24:28 +08:00
@blackjar fib 要求 n-1 和 n-2 ,不是尾递归
如果是存在尾递归,则必然可以重写为循环,因为编译器就是这么干的

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

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

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

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

© 2021 V2EX