Due Monday, October 21 at 11:59 pm Pacific
- Having trouble meeting the deadline? Read about our course's late policy.
- In this course, we express all date/times in Pacific time GMT -7. Our Paperless submission system also displays/records due dates and submission times in Pacific time.
- This assignment is to be completed individually. Working in pairs/groups is not permitted.
Recursion is a powerful problem-solving tool with many practical applications. This week's assignment is a recursion "sampler" that introduces recursive problem-solving through several small, independent tasks. Learning to solve problems recursively can be challenging at first. We think it's best to practice in isolation before adding the complexity of integrating recursion into a larger program. We'll get to that in future assignments!
Most students find that it takes some time to get comfortable thinking recursively. We recommend that you start the assignment early. Read over the problem statements today and get your brain starting to mull it over. There is not a large amount of code for you to write, but you want to give yourself plenty of time to wrap your head around this new way of solving problems. And while that beautiful recursive solution may be only a few elegant lines, you'll work hard on each line. Recursive code can be dense and complex and requires your full attention to get the details just right.
Dedicate yourself to deeply assimilating the foundation concepts within the context of these small, targeted problems. Lecture will continue on to explore more advanced applications of recursion. By next week, you'll be in prime shape to tackle recursive solutions for ever more impressive problems.
This assignment is to be completed individually. Working in pairs/groups is not permitted.
Learning goals
After completing this assignment, you will be able toā¦
- Develop the recursive insight to decompose a problem into smaller, self-similar tasks.
- Structure a recursive solution by dividing a problem into one or more base cases and one or more recursive cases.
- Understand and trace execution through recursive function calls.
- Apply techniques for testing, debugging, and analyzing recursive functions.
Assignment parts
This assignment consists of a short warmup exercise and four recursive functions.
-
Warmup
Practice with unit tests and debugging and timing recursive functions.
-
Ballot counting
How likely to have no change in leader when tallying ballots?
-
Balanced
Determine whether an expression has properly matched pairs of bracketing characters.
-
Sierpinski Fractal
Draw a beautiful self-similar fractal triangle.
-
Merging Sorted Sequences
Implement an efficient divide-and-conquer algorithm for merging a collection of sorted sequences.
Getting started
We provide a ZIP of the starter project. Download the zip, extract the files, and open the .pro file in Qt Creator.
š¦ Starter code
The source files you will edit are ballots.cpp
, balanced.cpp
, sierpinski.cpp
, and merge.cpp
Additionally, you will answer questions in short_answer.txt
.
Resources
Here are some resources that you might find helpful for this assignment:
- The CS106B Guide to Testing
- The CS106B Style Guide
- Resolving Common Build/Run Errors, compiled by section leader Jillian Tang.
- Lectures: Monday Intro to Recursion, Wednesday Big O, Friday More Recursion, Monday Fractals
- Section: see Section 2 and Section 3 for recursive examples
- Textbook Chapters 7, 8, and 9. These chapters are a great resource āthe explanations and examples for recursion are Professor Eric Roberts at his very best. Eric is our long-time Stanford colleague and a gifted educator.
- Eric also wrote a lovely full book Thinking Recursively, available in Stanford library https://searchworks.stanford.edu/view/1194923
Getting help
Recursion can take some time to get used to, so donāt be dismayed if you canāt immediately sit down and solve these problems. Ask for advice and guidance if you need it. Once everything clicks, youāll have a much deeper understanding of just how cool a technique this is.
Look for an announcement on the Ed forum for the YEAH session for this assignment. If you have questions for us, the Ed forum is open 24/7 for general discussion. Always start by searching first to see if your question has already been asked and answered before making a new post. To troubleshoot a problem with your specific code, your best bet is to bring it to the LaIR helper hours or office hours.
Submit
Before you call it done, run through our submit checklist to be sure all your t
s are crossed and i
s dotted. Then upload your completed files to Paperless for grading.
Please submit only the files you edited; for this assignment, these files will be:
ballots.cpp
balanced.cpp
sierpinski.cpp
merge.cpp
short_answer.txt
š Submit to Paperless
Note: On Paperless, all due dates and submission times are expressed in Pacific time.