This preview shows pages 1–3. Sign up to view the full content.
CS106B
Handout #18
J Zelenski
January 30, 2008
Assignment #3: Recursion
Due:
Wed, Feb 6th
2:15pm
This week's task consists of a problem set of several small recursion functions to write. Learning to
solve problems recursively can be challenging, especially at first. We think it's best to practice in
isolation before adding the complexity of integrating recursion into a larger program. The recursive
solutions to these problems are quite short —typically less than a dozen lines each. That doesn't
mean you should put this assignment off until the last minute though—recursive solutions can often
be formulated in a few concise, elegant lines but the density and complexity that can be packed into
such a small amount of code may surprise you.
The first few problems have some hints about how to get started, the later ones you will need to work
out the recursive decomposition for yourself. It will take some time and practice to wrap your head
around this new way of solving problems, but once you "grok" it, you'll be amazed at how delightful
and powerful it can be.
Warmups.
First, we present two warmup problems (one simple, one more involved), for which we
provide hints and solutions. You don’t need to hand in solutions to the warmups. We recommend
you first try to work through them by yourself. If you get stuck, ask for help and/or take a look at
our solutions posted on the web site. You can also freely discuss the details of the warmup
problems (including sharing code) with other students. We want everyone to start the problem set
with a good grasp on the recursion fundamentals and the warmups are designed to help. Once
you're working on the assignment problems, we expect you to do your own original, independent
work (but as always, you can ask the course staff if you need a little help).
Warmup A: Print in binary
Inside a computer system, integers are represented as a sequence of bits, each of which is a single
digit in the binary number system and can therefore have only the value 0 or 1. The table below
shows the first few integers represented in binary:
0
!
0
1
!
1
10
!
2
11
!
3
100
!
4
101
!
5
110
!
6
Each entry in the left side of the table is written in its standard binary representation, in which each
bit position counts for twice as much as the position to its right. For instance, you can demonstrate
that the binary value
110
represents the decimal number 6 by following this logic:
1
1
0
xxx
421
420
=
++
6
=
place value
binary digits
Binary is a base2 number system instead of the decimal (base10) system we are familiar with.
Write a recursive function
PrintInBinary(int num)
that prints the binary representation for a
given integer. For example, calling
PrintInBinary(5)
would print 101. Your function may assume
the integer parameter is nonnegative.
This preview has intentionally blurred sections. Sign up to view the full version.
View Full Document2
The recursive insight for this problem is to realize you can identify the least significant binary digit
by using the modulus operator with value 2. For example, given the integer 35, mod by 2 tells you
that the last binary digit must be 1 (i.e. this number is odd), and division by 2 gives you the
remaining portion of the integer (17). What 's the right way to handle the remaining portion? What is
This is the end of the preview. Sign up
to
access the rest of the document.
 Spring '11
 Smith
 Recursion

Click to edit the document details