-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathfibonacci_sequence.php
More file actions
56 lines (47 loc) · 1.12 KB
/
Copy pathfibonacci_sequence.php
File metadata and controls
56 lines (47 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
/**
* 斐波那契数列
* Created by PhpStorm.
* User: chentao
* Date: 2019/1/22
* Time: 7:14 PM
*/
function fib($n, $a, $b) {
$arr[1] = $a;
$arr[2] = $b;
if ($n <3) return $arr[$n];
for ($i = 3; $i <= $n; $i++) {
$arr[$i] = $arr[$i-1] + $arr[$i -2];
echo $i ." : ".$arr[$i].PHP_EOL;
}
return $arr[$n];
};
//时间复杂度 O(n)
function fib2($n, $a, $b) {
if ($n == 1) return $a;
if ($n == 2) return $b;
$c = 0;
for ($i = 3; $i <= $n; $i++) {
$c = $a + $b;
$a = $b;
$b = $c;
echo $i." : ".$c.PHP_EOL;
}
return $c;
}
//递归实现 求数列的第n个数 时间复杂度O(2^n) 优点是算法简单
function fib3($n)
{
if ($n < 2) return $n;
return fib3($n-2) + fib3($n-1);
}
// 缓存中间结果,时间复杂度O(n),空间复杂度O(n)
function fib3_optimized($n, &$memo = []) {
if (isset($memo[$n])) return $memo[$n];
if ($n < 2) return $n;
$memo[$n] = fib3_optimized($n - 1, $memo) + fib3_optimized($n - 2, $memo);
return $memo[$n];
}
// 1 1 2 3 ...
var_dump(fib(3,1,1));
var_dump(fib3_optimized(50));