For working professionals
For fresh graduates
More
13. Print In Python
15. Python for Loop
19. Break in Python
23. Float in Python
25. List in Python
27. Tuples in Python
29. Set in Python
53. Python Modules
57. Python Packages
59. Class in Python
61. Object in Python
73. JSON Python
79. Python Threading
84. Map in Python
85. Filter in Python
86. Eval in Python
96. Sort in Python
101. Datetime Python
103. 2D Array in Python
104. Abs in Python
105. Advantages of Python
107. Append in Python
110. Assert in Python
113. Bool in Python
115. chr in Python
118. Count in python
119. Counter in Python
121. Datetime in Python
122. Extend in Python
123. F-string in Python
125. Format in Python
131. Index in Python
132. Interface in Python
134. Isalpha in Python
136. Iterator in Python
137. Join in Python
140. Literals in Python
141. Matplotlib
144. Modulus in Python
147. OpenCV Python
149. ord in Python
150. Palindrome in Python
151. Pass in Python
156. Python Arrays
158. Python Frameworks
160. Python IDE
164. Python PIP
165. Python Seaborn
166. Python Slicing
168. Queue in Python
169. Replace in Python
173. Stack in Python
174. scikit-learn
175. Selenium with Python
176. Self in Python
177. Sleep in Python
179. Split in Python
184. Strip in Python
185. Subprocess in Python
186. Substring in Python
195. What is Pygame
197. XOR in Python
198. Yield in Python
199. Zip in Python
The Fibonacci series in Python is an enchanting sequence of numbers with a profound presence in nature, art, and algorithms that has been a point of intrigue for millennia. In this tutorial, we'll not only delve deep into its mathematical foundations but also explore the most efficient techniques to compute it using Python. As we progress, we'll unravel why this series remains pivotal for both novice and expert programmers, as well as its broader significance in the fields of science and design.
Spanning from the spiral arrangements of leaves to the mesmerizing designs in Renaissance art, the Fibonacci series proves its universality across domains. Its simple principle—each number being the sum of its two predecessors—holds within its layers of complexity. Through this tutorial, we aim to guide you through the intricate process of computing the Fibonacci series in Python, illuminating the nuances and performance considerations along the way.
Here is a program for printing Fibonacci number in Python using the native approach:
Code:
p = 8
n1 = 0
n2 = 1
next_num = n2
count = 1
while count <= p:
print(next_num, end=" ")
count += 1
n1, n2 = n2, next_num
next_num = n1 + n2
print()
Explanation:
1. p = 8: This line initializes the variable p with the value 8. This variable represents the number of terms in the Fibonacci sequence that will be generated.
2. n1 = 0 and n2 = 1: These lines initialize two variables, n1 and n2, with the first two terms of the Fibonacci sequence: 0 and 1, respectively.
3. next_num = n2: This line sets the variable next_num to the value of n2, which is the second term in the sequence.
4. count = 1: This line initializes the variable count to 1. It will be used to keep track of how many terms have been printed so far.
5. The while loop: This loop runs as long as count is less than or equal to p, which means it will generate p terms of the Fibonacci sequence.
6. Inside the loop:
7. print(): After the loop completes, this line adds a new line to separate the Fibonacci sequence from any subsequent output.
Here is a Python program to print fibonacci series using recursion:
Code:
def fibonacci(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
# Get the input from the user
num_terms = int(input("Enter the number of Fibonacci terms you want: "))
# Print Fibonacci sequence
print("Fibonacci sequence:")
for i in range(num_terms):
print(fibonacci(i))
Explanation:
1. def fibonacci(n): This is a recursive function definition that calculates the n-th term of the Fibonacci sequence. It uses the following logic:
2. num_terms = int(input("Enter the number of Fibonacci terms you want: ")): This line prompts the user to enter the number of Fibonacci terms they want to generate and converts the input to an integer stored in the variable num_terms.
3. print("Fibonacci sequence:"): This line just prints a header to indicate that the Fibonacci sequence is being printed.
4. for i in range(num_terms): This loop iterates from 0 up to num_terms - 1. This is used to generate the first num_terms of the Fibonacci sequence.
5. Inside the loop:
print(fibonacci(i)): This line prints the i-th term of the Fibonacci sequence by calling the Fibonacci function with argument i.
The code generates the Fibonacci sequence recursively. However, it's important to note that this approach is inefficient for larger values of n due to repeated calculations. This is because the recursive function recalculates the same terms multiple times. A more efficient approach is to use dynamic programming or an iterative approach.
Here is a program for a Fibonacci sequence Python using dynamic programming:
Code:
def fibonacci_dp(n):
if n <= 0:
return 0
elif n == 1:
return 1
fib = [0] * (n + 1)
fib[1] = 1
for i in range(2, n + 1):
fib[i] = fib[i - 1] + fib[i - 2]
return fib[n]
# Get the input from the user
num_terms = int(input("Enter the number of Fibonacci terms you want: "))
# Print Fibonacci sequence
print("Fibonacci sequence:")
for i in range(num_terms):
print(fibonacci_dp(i))
Explanation:
This code snippet defines a function fibonacci_dp(n) that calculates the n-th Fibonacci number using a dynamic programming approach.
1. def fibonacci_dp(n): This is a function definition for calculating the n-th Fibonacci number using dynamic programming.
2. num_terms = int(input("Enter the number of Fibonacci terms you want: ")): This line prompts the user to enter the number of Fibonacci terms they want to generate and converts the input to an integer stored in the variable num_terms.
3. print("Fibonacci sequence:"): This line just prints a header to indicate that the Fibonacci sequence is being printed.
4. for i in range(num_terms): This loop iterates from 0 up to num_terms - 1. This is used to generate and print the first num_terms Fibonacci numbers.
5. Inside the loop:
print(fibonacci_dp(i)): This line prints the i-th Fibonacci number by calling the fibonacci_dp function with argument i.
The dynamic programming approach efficiently computes Fibonacci numbers by avoiding redundant calculations by storing previously computed values. This makes it a much better choice for larger values of n compared to the naive recursive approach.
Here is an example of optimizing Python Fibonacci series:
Code:
def fibonacci(k):
x = 0
y = 1
if k < 0:
print("wrong input")
elif k == 0:
return 0
elif k == 1:
return y
else:
for i in range(1, k):
z = x + y
x = y
y = z
return y
print(fibonacci(8))
Explanation:
This code defines a function fibonacci(k) that calculates the k-th Fibonacci number using an iterative approach.
1. def fibonacci(k): This is a function definition for calculating the k-th Fibonacci number using an iterative approach.
2. if k < 0: This condition checks if the input k is negative.
3. elif k == 0: This condition checks if k is equal to 0.
4. elif k == 1: This condition checks if k is equal to 1.
5. else: If none of the above conditions are met, this means k is greater than 1, so the loop approach will be used.
6. return y: After the loop completes, the value of y will hold the k-th Fibonacci number, so the function returns it.
7. print(fibonacci(8)): This line calls the Fibonacci function with an argument of 8 and prints the result.
The iterative approach calculates the Fibonacci number by iteratively updating the values of x and y while progressing through the sequence. This method is more efficient than the naive recursive approach because it avoids redundant calculations.
Here is another example of a Fibonacci program in Python using the cache:
Code:
from functools import lru_cache
@lru_cache(None)
def fibonacci(n: int) -> int:
if n < 0:
print("wrong input")
return
elif n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(8))
Explanation:
1. from functools import lru_cache: This line imports the lru_cache decorator from the functools module. lru_cache stands for "Least Recently Used Cache" and is used for memoization, which optimizes function calls by storing the results of expensive function calls and returning the cached result when the same inputs occur again.
2. @lru_cache(None): This line decorates the fibonacci function with the lru_cache decorator. The None argument means that there is no limit to the cache size. The decorator will automatically cache the results of function calls, making subsequent calls with the same input more efficient.
3. def fibonacci(n: int) -> int: This is the definition of the fibonacci function. It takes an integer n as an argument and returns an integer.
4. if n < 0: This condition checks if the input n is negative.
5. elif n < 2: This condition checks if n is less than 2.
6. return fibonacci(n - 1) + fibonacci(n - 2): This is the recursive part of the function.
7. print(fibonacci(8)): This line calls the fibonacci function with an argument of 8 and prints the result.
By using the lru_cache decorator, this code optimizes the Fibonacci calculation by avoiding redundant calculations and storing previously computed results. This makes the recursive approach much more efficient, especially for larger values of n.
Code:
def fibonacci(x, memo={}):
if x <= 0:
return 0
elif x == 1:
return 1
elif x in memo:
return memo[x]
else:
memo[x] = fibonacci(x-1) + fibonacci(x-2)
return memo[x]
# Driver Program
print(fibonacci(8))
Explanation:
This code defines a fibonacci function that calculates the x-th Fibonacci number using recursion and memoization.
Code:
def fibonacci_sequence(n):
fib_sequence = [0, 1]
for i in range(2, n):
next_fib = fib_sequence[i - 1] + fib_sequence[i - 2]
fib_sequence.append(next_fib)
return fib_sequence
num_terms = int(input("Enter the number of Fibonacci terms you want: "))
print("Fibonacci sequence:")
sequence = fibonacci_sequence(num_terms)
for num in sequence:
print(num)
Code:
xterms = int(input("How many terms? "))
x1, x2 = 0, 1
c = 0
if xterms <= 0:
print("Please enter a positive integer")
elif xterms == 1:
print("Fibonacci sequence upto",xterms,":")
print(x1)
else:
print("Fibonacci sequence:")
while c < xterms:
print(x1)
xth = x1 + x2
x1 = x2
x2 = xth
c += 1
Having now journeyed through the depths of the Fibonacci series and its implementation in Python, we've showcased its rich history and contemporary relevance. Understanding the Fibonacci series isn't just a rite of passage for a programmer, but an exploration of a pattern that has transcended time, existing in realms from the branching of trees to the spiraling galaxies.
As you continue your journey in the world of programming and data structures, consider upGrad's comprehensive courses that serve as beacons for upskilling professionals in the digital age.
A sequence where each number is the sum of the two preceding numbers, beginning usually with 0 and 1.
It's rooted in the golden ratio and mathematical induction, ensuring efficient computation of any Fibonacci number.
Absolutely! While recursion is a popular method, you can also compute the Fibonacci series using iterative loops, array manipulation, or even formulas like Binet's. Each approach has its advantages, and the choice often depends on considerations like performance needs and code simplicity.
Its patterns are observed in nature, art, and also have applications in algorithms and financial markets.
While both represent sequences, their computation diverges. Factorial multiplies numbers successively, while Fibonacci adds them.
Take our Free Quiz on Python
Answer quick questions and assess your Python knowledge
Author
Talk to our experts. We are available 7 days a week, 9 AM to 12 AM (midnight)
Indian Nationals
1800 210 2020
Foreign Nationals
+918045604032
1.The above statistics depend on various factors and individual results may vary. Past performance is no guarantee of future results.
2.The student assumes full responsibility for all expenses associated with visas, travel, & related costs. upGrad does not provide any a.