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

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

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

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

5954 次点击
所在节点    PHP
48 条回复
laoyuan
2017-01-03 16:30:47 +08:00
新年刚开始又来黑 PHP 。。总之不用递归都是好的
superYy
2017-01-03 16:35:04 +08:00
性能低!应该创建一个缓冲数组存贮之前的值
misaka19000
2017-01-03 16:36:05 +08:00
还行,不过不是非得用数组吧
GPIO
2017-01-03 16:45:20 +08:00
中学学数列的时候都会讲到斐波那契数列的啊,你是不是当时没好好听课。。。
superYy
2017-01-03 16:48:49 +08:00
@superYy 没仔细看,之前说错了
gisonrg
2017-01-03 17:02:00 +08:00
不用数组只用两个变量可以省空间→_→
mrgeneral
2017-01-03 17:17:06 +08:00
算法没啥问题啊。

前面的存下来没啥意义, echo 输出了吧,换成俩变量,节省空间。
SteveLee
2017-01-03 17:26:25 +08:00
矩阵快速 mi
dtfm
2017-01-03 17:46:16 +08:00
fib 不应该这样么? a, b = b , a+b
em2046
2017-01-03 17:49:34 +08:00
没毛病
为啥不用递归呢
PS :递归也可以不是 O(2^n)
akira
2017-01-03 18:04:57 +08:00
没问题。只是当 N 比较大的时候,会略尴尬
q397064399
2017-01-03 18:09:32 +08:00
@em2046 空间复杂度为 O(2^n) 递归过深,直接爆栈,所以才有了 stackoverflow.com
q397064399
2017-01-03 18:12:10 +08:00
@em2046 递归调用每一次 call ,按照计算机的函数堆栈模型,栈帧要向下延伸,然后栈容量不够用的时候,就直接爆了
q397064399
2017-01-03 18:13:45 +08:00
一般问菲波那切数列的话,都会接着问 栈溢出的问题,
如果不知道函数递归调用过深导致的爆栈问题,就会略显尴尬了
loggerhead
2017-01-03 18:18:16 +08:00
可以看看我这篇文章——求 Fibonacci 数列的 N 种算法: https://loggerhead.me/posts/qiu-fibonacci-shu-lie-de-n-chong-suan-fa.html
xjp
2017-01-03 18:25:44 +08:00
没有问题
assad
2017-01-03 18:25:47 +08:00
import numpy

def mm_fib(n):
return (numpy.matrix([[2,1],[1,1]])**(n//2))[0,(n+1)%2]

[mm_fib(i) for i in range(20)]
Kilerd
2017-01-03 18:35:11 +08:00
@loggerhead

> 重复平方技术也可以用在求 Fibonacci 数上。

可行吗?? 我想了一下,好像没有什么思路。 求指点。
loggerhead
2017-01-03 18:39:55 +08:00
@Kilerd 文章中有写。比如: 2^8 = 2^4 * 2^4 就只用算一次 2^4 和一次乘法,时间复杂度降到了 O(logn)
Contextualist
2017-01-03 18:43:08 +08:00
@Kilerd 文章中下面的矩阵乘法和代数方法就是“重复平方”(其实就是乘法结合律)的具体实现

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

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

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

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

© 2021 V2EX