| | """ |
| | Fibonacci computation functions for testing function analysis. |
| | """ |
| |
|
| | def fibonacci_recursive(n): |
| | """Calculate fibonacci number using recursion.""" |
| | if n <= 1: |
| | return n |
| | return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2) |
| |
|
| |
|
| | def fibonacci_iterative(n): |
| | """Calculate fibonacci number using iteration.""" |
| | if n <= 1: |
| | return n |
| | |
| | a, b = 0, 1 |
| | for _ in range(2, n + 1): |
| | a, b = b, a + b |
| | return b |
| |
|
| |
|
| | def fibonacci_memoized(n, memo=None): |
| | """Calculate fibonacci number using memoization.""" |
| | if memo is None: |
| | memo = {} |
| | |
| | if n in memo: |
| | return memo[n] |
| | |
| | if n <= 1: |
| | memo[n] = n |
| | return n |
| | |
| | memo[n] = fibonacci_memoized(n - 1, memo) + fibonacci_memoized(n - 2, memo) |
| | return memo[n] |
| |
|
| |
|
| | def fibonacci_sequence(count): |
| | """Generate a sequence of fibonacci numbers.""" |
| | sequence = [] |
| | for i in range(count): |
| | sequence.append(fibonacci_iterative(i)) |
| | return sequence |
| |
|
| |
|
| | def compare_fibonacci_methods(n): |
| | """Compare different fibonacci calculation methods.""" |
| | import time |
| | |
| | methods = [ |
| | ("Recursive", fibonacci_recursive), |
| | ("Iterative", fibonacci_iterative), |
| | ("Memoized", fibonacci_memoized) |
| | ] |
| | |
| | results = {} |
| | for name, func in methods: |
| | start_time = time.time() |
| | result = func(n) |
| | end_time = time.time() |
| | results[name] = { |
| | 'result': result, |
| | 'time': end_time - start_time |
| | } |
| | |
| | return results |
| |
|
| |
|
| | def validate_fibonacci_result(n, result): |
| | """Validate if a fibonacci result is correct.""" |
| | if n <= 1: |
| | return result == n |
| | |
| | |
| | expected = fibonacci_iterative(n) |
| | return result == expected |
| |
|
| |
|
| | if __name__ == "__main__": |
| | n = 10 |
| | print(f"Fibonacci({n}) using different methods:") |
| | |
| | results = compare_fibonacci_methods(n) |
| | for method, data in results.items(): |
| | print(f"{method}: {data['result']} (took {data['time']:.6f} seconds)") |
| | |
| | print(f"\nFirst 15 fibonacci numbers: {fibonacci_sequence(15)}") |
| |
|