⚡️ Speed up function fibonacci by 409%
#1161
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.
📄 409% (4.09x) speedup for
fibonacciincode_to_optimize_js_esm/fibonacci.js⏱️ Runtime :
104 microseconds→20.5 microseconds(best of1runs)📝 Explanation and details
The optimization transforms the Fibonacci implementation from exponential recursive to linear iterative, achieving a 408% speedup (5x faster).
What Changed:
prev,curr) to track the last two Fibonacci numbersWhy It's Faster:
The original recursive approach has O(2^n) time complexity because it recalculates the same values exponentially many times. For example,
fibonacci(5)callsfibonacci(3)twice,fibonacci(2)three times, etc. The optimized version computes each Fibonacci number exactly once in a forward pass, achieving O(n) time complexity.The speedup is dramatic for larger inputs:
Impact on Workloads:
Based on the test suite, this optimization particularly benefits:
Trade-offs:
The optimization changes behavior for edge cases involving non-integer inputs (fractional numbers, null, undefined) since the loop-based approach doesn't naturally handle these. However, for the primary use case (non-negative integers), correctness is preserved and performance is vastly superior.
✅ 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-mkr292d8and push.