⚡️ Speed up function fibonacci by 111%
#1163
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📄 111% (1.11x) speedup for
fibonacciincode_to_optimize_js_esm/fibonacci.js⏱️ Runtime :
45.5 microseconds→21.5 microseconds(best of1runs)📝 Explanation and details
The optimized code replaces the exponential-time recursive algorithm with a linear-time iterative approach, achieving a 111% speedup (from 45.5μs to 21.5μs).
Key optimization:
fibonacci(5)recalculatesfibonacci(3)twice andfibonacci(2)three times.prev,curr) to track consecutive Fibonacci numbers, computing each value exactly once in a simple loop.Why this is faster:
The recursive approach makes approximately 2^n function calls for input n, each with call stack overhead. The iterative version performs exactly n-1 loop iterations with minimal overhead—no function calls, no stack frames, just basic arithmetic operations. This eliminates both the exponential branching factor and the per-call overhead.
Test performance characteristics:
Impact:
This optimization is particularly valuable if
fibonacci()is called with values above n=20 or invoked frequently in loops/hot paths, where the exponential cost of recursion would compound significantly.✅ Correctness verification report:
⚙️ Click to see Existing Unit Tests
fibonacci.test.js::fibonacci returns 0 for n=0fibonacci.test.js::fibonacci returns 1 for n=1fibonacci.test.js::fibonacci returns 1 for n=2fibonacci.test.js::fibonacci returns 233 for n=13fibonacci.test.js::fibonacci returns 5 for n=5fibonacci.test.js::fibonacci returns 55 for n=10🌀 Click to see Generated Regression Tests
To edit these changes
git checkout codeflash/optimize-fibonacci-mkr2v727and push.