navred61's picture
copied from private space
99a41ea
"""
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
# Use iterative method as baseline for validation
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)}")