0% found this document useful (0 votes)
6 views

01 Recursion - en

Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

01 Recursion - en

Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

Hello and welcome to the lesson devoted to recursion.

We start this lesson with a


very soft introduction to recursion. So imagine a line to a museum. Imagine a
person that just gets in the line, call her Alice. And she has this natural will to
know the number of people before her. So she asks Bob, who is the person just right
before her, "Could you please tell me the number of people before you." So what is
important to realize at this point is that Bob faces exactly the same problem at
this point. So Bob somehow computes the number of people before him is 239, for
example. So at this point, Alice knows that the number of people before her is
equal to 240, right? And this can be implemented in the following very simple code.
So we call this procedure, number of people before some person in a line. So it is
implemented as follows, just this four simple lines of code: If there is nobody
before this person, then we just return zero. Otherwise there is a person before A,
let's call him B. So what we do, we first make a recursive call for B. By saying
recursive call, I mean the code for this, for exactly the same function because we
need to perform exactly the same computational task. So we make this call, it
returns us some result, we add one and then we return it, okay? So another very
standard example is the following: it's computing the factorial function. So the
factorial of positive integer n, it is denoted as follows, so pronounce it n
factorial. Is by definition equal to the product of all positive integers from 1 to
n. So for example, five factorial is equal to one times two, times three, times
four, times five, which is equal in turn to one hundred and twenty. You can notice
that it is actually same as one times two, times three, times four multiplied by
five, but this is just four factorial, right? Just by definition, right? So this
can be as well expressed as four factorial times five. And this gives rise to the
following recursive definition: So n factorial is equal to one when n is equal to
one, or it is equal to n times n minus one factorial, when n is greater than 1. So
it is a recursive definition because it defines n factorial, so it defines a
function in terms of itself. So it expresses n factorial through n minus one
factorial, right? So the recursive definition defines an object in terms of itself.
The recursive program calls itself. So when we have such and at the same time you
can continue this further, right? So n minus one factorial is also n minus one
times n, minus two factorial. And n minus two factorial in turn is n minus two
times n minus three factorial. So we somehow need to ensure that this process of
calling itself will terminate at some point and that there will be just a finite
number of steps. So we need to somehow ensure this and we will get back to this
just in a minute. So before this, let's first implement the very simple program for
computing the factorial, and we first turn its basic definition into an iterative
program. So here, we first make a check of areas in greater than zero, then we just
declare some new variable, which is going to store our result. And then we iterate
all possible values from one to n, this is down here. And for each such value, we
multiply the result by it and finally, we return the result. So this is iterative
program, okay? In turn, the recursive program gives rise to the following recursive
procedure: Again, we first check that n is greater than zero, right? Then, if n is
equal to one, then we immediately return on. In this case there is nothing to
compute of course. Otherwise we return n times the factorial of n minus one. So
what will happen here actually during this recursive program is that first, the
factorial of n minus one is going to be computed, then it will be multiplied by n,
and then it will be returned. So this way we transform our recursive definition
into recursive program and once again, the way we ensure that the number of
recursive calls is going to be finite in this case is exactly because we have this
base case, the so called base case. So with each recursive call, n decreases by
one. So eventually, it will hit one and at this point, our recursive procedure will
return one and will stop using new recursive calls, okay? So termination is
important and usually, it is achieved as we've discussed already, by keeping track
of some parameter and by ensuring that it always decreases and that at some point
it will hit the base case. Okay? So when we were computing the lengths of the line,
we actually saw why our recursive procedure will eventually stop. Well, just
because with each recursive call, we get closer to the head of the line. to put it
otherwise, the number of people before the current person, it always increases by
one right with each recursive call. And it cannot become negative and when it is
zero, we actually return, we stop producing new recursive calls. And similarly, for
n factorial when computing factorial, n always decreases by one with each recursive
call and when its one, we just return, okay? Let me also show you several examples
of` the recursion of an infinite recursion. So the first one is shown here. So
here, instead of decreasing n with each recursive call, we actually increase it. So
what happens here is that it will produce just an infinite number of recursive
calls, an endless process of calling the same procedure. So in theory, such a
program will never stop. So n will be increased to infinity. In practice, if you
run this program, so what you get is that it will crash and you will get either
stack overflow message or message like maximum recursion depth exceeded, okay? A
little bit more examples, so for example, this is the same program for computing
factorial where we just forget to add a base case. So in this case, while this is
going to happen, regard this as an infinite recursion, so it is going to be
infinite just because there is no base case. If you call for example factorial
five, it will make make a recursive call for factorial four, then factorial three,
factorial two, factorial one, then factorial zero minus one, minus two, minus three
and so on. It will never stop. Another possibility of infinite recursion is the
following, So in this case we have some base case, however, we do not change the
parameter, the parameter does not decrease. So if you call factorial five, it will
call factorial five again, and again, and again, and again, and again, so forever.
Finally, two more jokey examples. So there is a standard joke that to understand
recursion, you must first understand recursion, which again puts you into an
infinite loop. So if you would like to start understanding recursion, according to
this rule, you must first understand recursion, but to understand recursion, you
must first understand recursion and so on. And finally, an example by Google. You
know that in Google there is this spell checking property, a suggesting product
feature, which if you make a typo in your search query, it will fix it for you and
that's whether you mean the following. So if you type recursion, the Google will
ask you, did you mean recursion and this is clickable actually, and if you click,
you will get to the same page and it will ask you again and then you will click
again, and again, and again, an endless number of times.

You might also like