Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
1cd69b32e7
|
|||
|
fbaf0330da
|
Executable
+46
@@ -0,0 +1,46 @@
|
||||
# Problem Statement: Write a program non-recursive and recursive program to calculate Fibonacci numbers and analyze their time and space complexity.
|
||||
|
||||
## NOTE: THIS IS A HEAVILY OPTIMIZED CODE FOR FIBONACCI.
|
||||
## NUMBER OF RECURSION CALLS (IN RECURSION) ARE LOWER THAN NUMBER OF ITERATIONS (IN ITERATION FUNCTION)
|
||||
|
||||
iteration_counter = 0
|
||||
recursion_counter = 0
|
||||
|
||||
# Non-recursion
|
||||
def fibonacci(n):
|
||||
global iteration_counter
|
||||
fib_series = []
|
||||
a = 0
|
||||
b = 1
|
||||
|
||||
for i in range(n):
|
||||
fib_series.append(a)
|
||||
a, b = b, a + b
|
||||
iteration_counter += 1
|
||||
|
||||
return fib_series
|
||||
|
||||
# Recursion
|
||||
def fibonacci_recursive(n):
|
||||
global recursion_counter
|
||||
recursion_counter += 1
|
||||
if n <= 0:
|
||||
return []
|
||||
elif n == 1:
|
||||
return [0]
|
||||
elif n == 2:
|
||||
return [0, 1]
|
||||
else:
|
||||
fib_series = fibonacci_recursive(n - 1) # Get the series up to n-1
|
||||
fib_series.append(fib_series[-1] + fib_series[-2]) # Append the next Fibonacci number
|
||||
return fib_series
|
||||
|
||||
# Non-recursion
|
||||
n = int(input("Enter total numbers to print in fibonacci series:\t"))
|
||||
print("Fibonacci Series (non-recusive):\t", fibonacci(n))
|
||||
print("Iteration counter:\t", iteration_counter)
|
||||
|
||||
# Recursion
|
||||
print("Fibonacci Series (recusive):\t\t", fibonacci_recursive(n))
|
||||
print("Recursion counter:\t", recursion_counter)
|
||||
|
||||
Executable → Regular
+41
-24
@@ -1,33 +1,50 @@
|
||||
# Code-A1 (Fibonacci)
|
||||
# Problem Statement: Write a program non-recursive and recursive program to calculate Fibonacci numbers and analyze their time and space complexity.
|
||||
|
||||
# Non-recursion
|
||||
def fibonacci(n):
|
||||
fib_series = []
|
||||
a = 0
|
||||
b = 1
|
||||
# Initalize global variables
|
||||
iteration_counter = 0
|
||||
recursion_counter = 0
|
||||
|
||||
for i in range(n):
|
||||
fib_series.append(a)
|
||||
a, b = b, a + b
|
||||
# Iteration
|
||||
def fibonacci_iteration(n):
|
||||
fib_series = [] # For storing Fibonacci series
|
||||
previous = 0 # Previous
|
||||
current = 1 # Next
|
||||
global iteration_counter # Global iteration counter
|
||||
iteration_counter = 0 # Initialize global iteration counter to 0
|
||||
|
||||
return fib_series
|
||||
for i in range(n):
|
||||
fib_series.append(previous)
|
||||
previous, current = current, previous + current
|
||||
iteration_counter += 1
|
||||
|
||||
return fib_series
|
||||
|
||||
# Recursion
|
||||
def fibonacci_recursive(n):
|
||||
if n <= 0:
|
||||
return []
|
||||
elif n == 1:
|
||||
return [0]
|
||||
elif n == 2:
|
||||
return [0, 1]
|
||||
else:
|
||||
fib_series = fibonacci_recursive(n - 1) # Get the series up to n-1
|
||||
fib_series.append(fib_series[-1] + fib_series[-2]) # Append the next Fibonacci number
|
||||
return fib_series
|
||||
def fibonacci_recursion(n):
|
||||
global recursion_counter # Global recursion counter
|
||||
recursion_counter += 1 # Increment recursion counter for each call
|
||||
|
||||
if (n <= 0): # Handle n less than or equal to 0
|
||||
return 0
|
||||
elif (n <= 1): # Handle n less than or equal to 1
|
||||
return n
|
||||
else: # Recursive call
|
||||
return fibonacci_recursion(n - 1) + fibonacci_recursion(n - 2)
|
||||
|
||||
# Non-recursion
|
||||
n = int(input("Enter total numbers to print in fibonacci series:\t"))
|
||||
print("Fibonacci Series (non-recusive):\t", fibonacci(n))
|
||||
|
||||
# Recursion
|
||||
print("Fibonacci Series (recusive):\t\t", fibonacci_recursive(n))
|
||||
# Fibonacci using iteration
|
||||
fib_series = fibonacci_iteration(n)
|
||||
print(f"Fibonacci using iteration:\t{fib_series}")
|
||||
print(f"Iteration counter:\t{iteration_counter}| Time Complexity: O(n) (linear growth)")
|
||||
|
||||
print("="*80)
|
||||
|
||||
# Fibonacci using recursion
|
||||
fib_series = []
|
||||
for i in range(n):
|
||||
fib_series.append(fibonacci_recursion(i))
|
||||
print(f"Fibonacci using recursion:\t{fib_series}")
|
||||
print(f"Recursion counter:\t{recursion_counter} | Time Complexity: O(2^n) (exponential growth)")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user