Recursive Functions
Improved Recursive Fibonacci
A dictionary is a data structure that can be used as a key-value pair storage. Instead of providing index values as in tuples, the dictionary elements can be accessed and modified by using non-consecutive or non-integer keys. Dictionaries are defined by using a pair of curly braces and their values can be modified unlike the tuples.
# initialize an empty dictionary of fibonacci numbers
fibonacciDictionary = {}
def fibonacci(number):
result = 0
if (number == 0 or number == 1):
result = number
if (not number in fibonacciDictionary):
fibonacciDictionary[number] = result
elif (not number in fibonacciDictionary):
# if this number does not exist in the fibonacci dictionary,
# calculate it and insert into the dictionary
result = fibonacci(number - 1) + fibonacci(number - 2)
fibonacciDictionary[number] = result
print("fibonacci function is being called recursively for numbers: ", number - 1, "and", number - 2)
else:
result = fibonacciDictionary[number]
print("fibonacci value was previously calculated for", number,
"returning the value", result, "from the dictionary, and NOT calling the function recursively")
return result
number = 0
print(number, "->", fibonacci(number))
number = 1
print(number, "->", fibonacci(number))
number = 2
print(number, "->", fibonacci(number))
number = 3
print(number, "->", fibonacci(number))
number = 4
print(number, "->", fibonacci(number))
number = 5
print(number, "->", fibonacci(number))
number = 6
print(number, "->", fibonacci(number))
number = 7
print(number, "->", fibonacci(number))
number = 8
print(number, "->", fibonacci(number))
number = 9
print(number, "->", fibonacci(number))
number = 10
print(number, "->", fibonacci(number))
number = 3
print(number, "->", fibonacci(number))
number = 10
print(number, "->", fibonacci(number))
number = 7
print(number, "->", fibonacci(number))
print(fibonacciDictionary)