# CS3330 Data Structures and Algorithms

Problem Set 1: Recursion and Complexity Analysis
CS3330 Data Structures and Algorithms

Overview: For problem 1(a) of this assignment, you will need a C++ compiler. In order to receive
credit, your program must compile and run; and you must provide the actual source code file so
that I can compile and run your program (e.g. the file you modified ending in .cpp). Examples on
how to import existing files into your compiler are provided in the file called Importing Source
Code.pdf. The remaining problems for the assignment must be written up within a single
Microsoft Word document. You must include your name and course number within all files that
you submit, including source code files as a comment at the top of each file that you create or
modify.
1. [7 points] Recursion. Read the assigned chapter and notes for Week 1 located in the Learning
Activities area in Blackboard. Then provide solutions for the following:
(a) [3 points] Download the f.cpp file, then using the definition below, implement the details
of a recursive function called f(n). This function can be directly translated into C/C++
from the following mathematical definition:

( 1) 2 1 0
( 1) 2 1 0
0 0
( )
f n n n
f n n n
n
f n
The function must be implemented based on the mathematical definition provided above.
Note: For this program, the function must use recursion. You only need to modify the
provided file by adding the necessary code to implement the TODO areas as noted in the
comments. Everything else in the program should remain the same.
Output: The output for this program once the function is implemented will be as follows:
f(-44) is 1936
f(-20) is 400
f(-1) is 1
f(0) is 0
f(1) is 1
f(13) is 169
f(20) is 400
f(50) is 2500
f(44) is 1936
** Press any key to continue **

(b) [2 points] Briefly explain how the following recursive function could result in an infinite
loop and what you could do to correct this:

(c) [2 points] Perform an Internet search and provide a brief description (at least a paragraph
with four to five sentences) of an example of a practical use for recursion. For example,
the practical use you mention should be something other than simple function
implementations such as factorial, the power of a number, Fibonacci, etc. The description
should be in your own words. Include the reference to your source or sources in APA
format at the end of your description.

2. [3 points] Complexity Analysis. Begin by reading the assigned chapter and notes for Week 2
located in the Learning Activities area in Blackboard. Then answer the following questions:

(a) [2 points] Briefly explain the difference between big-Ω (Omega) and big-O notation. Also
provide the mathematical definitions of each.

(b) [1 points] What is the asymptotic complexity (or big-O) of the following code block?
Briefly explain why.

Note: No programming is necessary for this problem. Just tell me what the big-O of the
function, and provide a couple of sentences explaining how you arrived at the solution.
for (int i=0; i < n; i++)
{
for (int j=0; j < n; j++)
{
a[i][j]=0;
for (int k=0; k < n; k++)
{
a[i][j] += b[i][k] * c[k][j];
}
}
}

Other Notes: Submit your solutions as a single Zip file using the Problem Set 1 link provided in
the Assignments area. If you are using the Visual C++ or Dev-C++ compiler, you should only
submit the source code files for your program (the files ending in .cpp and .h). For space reasons,
please do not submit the entire Visual C++ or Dev-C++ project folders. Do not hesitate to ask if
you have any questions or need clarification on what to do for this assignment.