@@ -53,23 +53,20 @@ $fibonacci = static function (int $number) use (&$fibonacci): int {
53
53
$fibonacci($number - 1) + $fibonacci($number - 2);
54
54
};
55
55
56
- $sleep = static function (int $second): int
57
- {
58
- sleep($second);
59
-
60
- return $second;
56
+ $fibonacciMemoized = static function (int $number) use (& $fibonacciMemoized): int {
57
+ return (1 >= $number) ?
58
+ $number :
59
+ $fibonacciMemoized($number - 1) + $fibonacciMemoized($number - 2);
61
60
};
62
-
63
- $fibonacci = Memoizer::fromClosure($sleep);
61
+ $fibonacciMemoized = Memoizer::fromClosure($fibonacciMemoized);
64
62
65
63
function bench(Closure $closure, ...$arguments): array
66
64
{
67
- $eval = static function(Closure $closure, ...$arguments): Generator
68
- {
69
- yield microtime(true);
70
- yield $closure(...$arguments);
71
- yield microtime(true);
72
- };
65
+ $eval = static function (Closure $closure, ...$arguments): Generator {
66
+ yield microtime(true);
67
+ yield $closure(...$arguments);
68
+ yield microtime(true);
69
+ };
73
70
74
71
$result = iterator_to_array($eval($closure, ...$arguments));
75
72
@@ -79,8 +76,8 @@ function bench(Closure $closure, ...$arguments): array
79
76
];
80
77
}
81
78
82
- var_dump(sprintf('[return: %s] [duration: %s]', ...bench($fibonacci, 10 ))); // ~10 seconds
83
- var_dump(sprintf('[return: %s] [duration: %s]', ...bench($fibonacci, 10 ))); // ~3.9e-5
79
+ var_dump(sprintf('[return: %s] [duration: %s]', ...bench($fibonacci, 30 ))); // ~3 seconds
80
+ var_dump(sprintf('[return: %s] [duration: %s]', ...bench($fibonacciMemoized, 30 ))); // ~0.0003 seconds
84
81
```
85
82
86
83
## Code style, code quality, tests and benchmarks
0 commit comments