Discussion 2C Notes (Week 5, February 4)
TA: Brian Choi ([email protected]
)
Section Webpage:
http://www.cs.ucla.edu/~schoi/cs32
Recursion
A
recursion
is a functionwriting technique where the function refers to itself
. Assuming you have learned
the concept of recursion sufficiently in the lecture, we’ll focus on the tricks in writing a recursive function.
The Way to Think About Recursion
Writing a recursive function involves the division of a problem into subproblems. A good example is the
factorial
function that computes
n! = n x (n1) x (n2) x .
.. x 2 x 1
for some arbitrary
n
≥
0
. Here is the
iterative way of writing
factorial
:
Iterative functions are more intuitive than recursive
functions because we can see the whole process  you see
how
factorial
goes from
1
to
n
and multiply them up in
that for loop.
When writing the recursive version of the same function,
you need not worry about “going from
1
to
n
.” Instead, we
only worry about “going from
n1
to
n
,”
believing
factorial(n1)
will return the right value
.
In
factorial
’s case, if you know the value of
factorial(n1)
, it is very easy to compute
factorial(n)
 we only need to multiply
n
to the value of
factorial(n1)
(because
n * factorial(n1)
= n * {(n1)*(n2)*.
..*2*1} = factorial(n)
).
This is what’s meant by “going from
n1
to
n
.”
Translating this into a C++ code, we get the following function:
My factorial function on the left simply assumes
that
factorial(n1)
returns what we want, and computes the
value of
factorial(n)
based on this assumption. When
factorial(n1)
is called, then it makes the same
assumption and uses the value of
factorial(n2)
to
compute its value, .
.. , and so on.
For example, if
factorial(5)
is called, it relies on the value
factorial(4)
returns. When
factorial(4)
is called, it relies on the value
factorial(3)
returns. When
factorial(3)
is called, it relies on the value
factorial(2)
This preview has intentionally blurred sections. Sign up to view the full version.
View Full Document
This is the end of the preview.
Sign up
to
access the rest of the document.
 Winter '08
 DavidSmallBerg
 Recursion, Computer Science II, int factorial, Brian Choi

Click to edit the document details