Compare commits
2 Commits
c27d224e93
...
1cd69b32e7
| 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.
|
# Problem Statement: Write a program non-recursive and recursive program to calculate Fibonacci numbers and analyze their time and space complexity.
|
||||||
|
|
||||||
# Non-recursion
|
# Initalize global variables
|
||||||
def fibonacci(n):
|
iteration_counter = 0
|
||||||
fib_series = []
|
recursion_counter = 0
|
||||||
a = 0
|
|
||||||
b = 1
|
|
||||||
|
|
||||||
for i in range(n):
|
# Iteration
|
||||||
fib_series.append(a)
|
def fibonacci_iteration(n):
|
||||||
a, b = b, a + b
|
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
|
# Recursion
|
||||||
def fibonacci_recursive(n):
|
def fibonacci_recursion(n):
|
||||||
if n <= 0:
|
global recursion_counter # Global recursion counter
|
||||||
return []
|
recursion_counter += 1 # Increment recursion counter for each call
|
||||||
elif n == 1:
|
|
||||||
return [0]
|
if (n <= 0): # Handle n less than or equal to 0
|
||||||
elif n == 2:
|
return 0
|
||||||
return [0, 1]
|
elif (n <= 1): # Handle n less than or equal to 1
|
||||||
else:
|
return n
|
||||||
fib_series = fibonacci_recursive(n - 1) # Get the series up to n-1
|
else: # Recursive call
|
||||||
fib_series.append(fib_series[-1] + fib_series[-2]) # Append the next Fibonacci number
|
return fibonacci_recursion(n - 1) + fibonacci_recursion(n - 2)
|
||||||
return fib_series
|
|
||||||
|
|
||||||
# Non-recursion
|
|
||||||
n = int(input("Enter total numbers to print in fibonacci series:\t"))
|
n = int(input("Enter total numbers to print in fibonacci series:\t"))
|
||||||
print("Fibonacci Series (non-recusive):\t", fibonacci(n))
|
|
||||||
|
|
||||||
# Recursion
|
# Fibonacci using iteration
|
||||||
print("Fibonacci Series (recusive):\t\t", fibonacci_recursive(n))
|
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