Professional Documents
Culture Documents
Slides01 PDF
Slides01 PDF
1 2 5 8
1258 / 10 1258 % 10
1 2 5 8
Dividing
Dividingtwo
twointegers
integersininC++
C++
always
always produces an integerby
produces an integer by
dropping any decimal value. Check
dropping any decimal value. Check
the
thetextbook
textbookfor
forhow
howtotooverride
override
this behavior.
this behavior.
Functions in Action
int
int main()
main() {{
int
int nn == getInteger("Enter
getInteger("Enter anan integer:
integer: ");
");
int
int digitSum
digitSum == sumOfDigitsOf(n);
sumOfDigitsOf(n);
cout
cout <<
<< nn <<
<< "" sums
sums to
to "" <<
<< digitSum
digitSum <<
<< endl;
endl;
return
return 0;
0;
}}
Functions in Action
int
int main()
main() {{
int
int nn == getInteger("Enter
getInteger("Enter anan integer:
integer: ");
");
int
int digitSum
digitSum == sumOfDigitsOf(n);
sumOfDigitsOf(n);
cout
cout <<
<< nn <<
<< "" sums
sums to
to "" <<
<< digitSum
digitSum <<
<< endl;
endl;
return
return 0;
0;
}}
Functions in Action
int
int main()
main() {{
137
int
int nn == getInteger("Enter
getInteger("Enter anan integer:
integer: ");
");
int n
int
int digitSum
digitSum == sumOfDigitsOf(n);
sumOfDigitsOf(n);
cout
cout <<
<< nn <<
<< "" sums
sums to
to "" <<
<< digitSum
digitSum <<
<< endl;
endl;
return
return 0;
0;
}}
Functions in Action
int
int main()
main() {{
137
int
int nn == getInteger("Enter
getInteger("Enter anan integer:
integer: ");
");
int n
int
int digitSum
digitSum == sumOfDigitsOf(n);
sumOfDigitsOf(n);
cout
cout <<
<< nn <<
<< "" sums
sums to
to "" <<
<< digitSum
digitSum <<
<< endl;
endl;
return
return 0;
0;
}}
The
Thevariable
variablennactually
actuallyisisan
an
honest-to-goodness
honest-to-goodness integer, notaa
integer, not
pointer
pointerto
toan
aninteger
integerthat
thatlives
lives
somewhere
somewhere else. In C++,all
else. In C++, all
variables stand for actual objects
variables stand for actual objects
unless
unlessstated
statedotherwise.
otherwise.(More
(More
on that later.)
on that later.)
Functions in Action
int
int main()
main() {{
137
int
int nn == getInteger("Enter
getInteger("Enter anan integer:
integer: ");
");
int n
int
int digitSum
digitSum == sumOfDigitsOf(n);
sumOfDigitsOf(n);
cout
cout <<
<< nn <<
<< "" sums
sums to
to "" <<
<< digitSum
digitSum <<
<< endl;
endl;
return
return 0;
0;
}}
Functions in Action
int
int main()
main() {{
137
int
int nn == getInteger("Enter
getInteger("Enter anan integer:
integer: ");
");
int n
int
int digitSum
digitSum == sumOfDigitsOf(n);
sumOfDigitsOf(n);
cout
cout <<
<< nn <<
<< "" sums
sums to
to "" <<
<< digitSum
digitSum <<
<< endl;
endl;
return
return 0;
0;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
137
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl;
nn /=
/= 10;
10;
return
return
}} 0;
0;
}}
return
return result;
result;
}}
When
Whenwe wecall sumOfDigitsOf,we
callsumOfDigitsOf, we
get our own variable named
get our own variable namedn.n.
It’s
It’sseparate
separatefrom
fromthe
thevariable
variablenn
ininmain(),
main(),and
andchanges
changestotothis
this
variable
variable n don’t reflect backinin
n don’t reflect back
main.
main.
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
137
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl;
nn /=
/= 10;
10;
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
137
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 0
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
137
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 0
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
137
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 0
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
137
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 7
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
137
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 7
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
13
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 7
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
13
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 7
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
13
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 7
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
13
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 10
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
13
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 10
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
1
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 10
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
1
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 10
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
1
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 10
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
1
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 11
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
1
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 11
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
0
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 11
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
0
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 11
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
intint
int sumOfDigitsOf(int
intmain()
sumOfDigitsOf(int
main() {{ n)
n) {{ 137
0
int
int result
intnn result = 0;
= 0;
== getInteger("Enter an
an integer:
integer: ");
"); int
int getInteger("Enter int nn
int
int digitSum
whiledigitSum
while (n
(n >> 0)== sumOfDigitsOf(n);
0) sumOfDigitsOf(n);
{{
cout
cout << << "Digit
result += sum:
"Digit
result += (n %% ""10);
sum:
(n <<
<< digitSum
10); digitSum <<
<< endl;
endl; 11
nn /=
/= 10;
10; int result
return
return
}} 0;
0;
}}
return
return result;
result;
}}
Functions in Action
int
int main()
main() {{ 137
int
int nn == getInteger("Enter
getInteger("Enter anan integer:
integer: ");
"); int n
int
int digitSum
digitSum == sumOfDigitsOf(n);
sumOfDigitsOf(n);
cout
cout <<
<< nn <<
<< "" sums
sums to
to "" <<
<< digitSum
digitSum <<
<< endl;
endl;
return
return 0;
0; 11
}}
Functions in Action
int
int main()
main() {{ 137
int
int nn == getInteger("Enter
getInteger("Enter anan integer:
integer: ");
"); int n
int
int digitSum
digitSum == sumOfDigitsOf(n);
sumOfDigitsOf(n);
cout
cout <<
<< nn <<
<< "" sums
sums to
to "" <<
<< digitSum
digitSum <<
<< endl;
endl;
return
return 0;
0; 11
}} 11
int digitSum
Functions in Action
int
int main()
main() {{ 137
int
int nn == getInteger("Enter
getInteger("Enter anan integer:
integer: ");
"); int n
int
int digitSum
digitSum == sumOfDigitsOf(n);
sumOfDigitsOf(n);
cout
cout <<
<< nn <<
<< "" sums
sums to
to "" <<
<< digitSum
digitSum <<
<< endl;
endl;
return
return 0;
0;
}} 11
int digitSum
Note
Notethat
thatthe
thevalue
valueof ofnnin
in
main is unchanged, because
main is unchanged, because
sumOfDigitsOfgot
sumOfDigitsOf gotits
itsown
own
copy
copyofofnnthat
thatonly
only
coincidentally
coincidentallyhas
hasthe
thesame
same
name as the copy in main.
name as the copy in main.
Functions in Action
int
int main()
main() {{ 137
int
int nn == getInteger("Enter
getInteger("Enter anan integer:
integer: ");
"); int n
int
int digitSum
digitSum == sumOfDigitsOf(n);
sumOfDigitsOf(n);
cout
cout <<
<< nn <<
<< "" sums
sums to
to "" <<
<< digitSum
digitSum <<
<< endl;
endl;
return
return 0;
0;
}} 11
int digitSum
Time-Out for Announcements!
Section Signups
●
Section signups go live tomorrow at
5:00PM and are open until Sunday at
5:00PM.
●
Sign up using this link:
http://cs198.stanford.edu/section
●
You need to sign up here even if you’re
already enrolled on Axess; we don’t use
Axess for sections in this class.
Qt Creator Help Session
●
Having trouble getting Qt Creator set up?
Katherine is holding a help session on
Thursday, 8:00PM – 10:00PM
Tresidder, First Floor
●
A request from the folks running this
session: before showing up, try using the
troubleshooting guide and make sure you
followed the directions precisely. It’s easy
to get this wrong, but easy to correct once
you identify where you went off-script.
Back to CS106B!
Thinking Recursively
Factorials
●
The number n factorial, denoted n!, is
n × (n – 1) × … × 3 × 2 × 1
●
For example:
●
3! = 3 × 2 × 1 = 6.
●
4! = 4 × 3 × 2 × 1 = 24.
●
5! = 5 × 4 × 3 × 2 × 1 = 120.
●
0! = 1. (by definition)
●
Factorials show up in unexpected places. We’ll see
one later this quarter when we talk about sorting
algorithms.
●
Let’s implement a function to compute factorials!
Computing Factorials
5! = 5 × 4 × 3 × 2 × 1
Computing Factorials
5! = 5 × 4 × 3 × 2 × 1
Computing Factorials
5! = 5 × 4 × 3 × 2 × 1
4!
Computing Factorials
5! = 5 × 4!
Computing Factorials
5! = 5 × 4!
Computing Factorials
5! = 5 × 4!
4! = 4 × 3 × 2 × 1
Computing Factorials
5! = 5 × 4!
4! = 4 × 3 × 2 × 1
Computing Factorials
5! = 5 × 4!
4! = 4 × 3 × 2 × 1
3!
Computing Factorials
5! = 5 × 4!
4! = 4 × 3!
Computing Factorials
5! = 5 × 4!
4! = 4 × 3!
Computing Factorials
5! = 5 × 4!
4! = 4 × 3!
3! = 3 × 2 × 1
Computing Factorials
5! = 5 × 4!
4! = 4 × 3!
3! = 3 × 2 × 1
Computing Factorials
5! = 5 × 4!
4! = 4 × 3!
3! = 3 × 2 × 1
2!
Computing Factorials
5! = 5 × 4!
4! = 4 × 3!
3! = 3 × 2!
Computing Factorials
5! = 5 × 4!
4! = 4 × 3!
3! = 3 × 2!
Computing Factorials
5! = 5 × 4!
4! = 4 × 3!
3! = 3 × 2!
2! = 2 × 1!
Computing Factorials
5! = 5 × 4!
4! = 4 × 3!
3! = 3 × 2!
2! = 2 × 1!
1! = 1 × 0!
Computing Factorials
5! = 5 × 4!
4! = 4 × 3!
3! = 3 × 2!
2! = 2 × 1!
1! = 1 × 0!
0! = 1
Another View of Factorials
1 if n = 0
n! =
n × (n – 1)! otherwise
Another View of Factorials
1 if n = 0
n! =
n × (n – 1)! otherwise
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
Another View of Factorials
1 if n = 0
n! =
n × (n – 1)! otherwise
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
cout
cout <<
<< "5!
"5! == "" <<
<< nn <<
<< endl;
endl;
return
return 0;
0;
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
cout
cout <<
<< "5!
"5! == "" <<
<< nn <<
<< endl;
endl;
return
return 0;
0;
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}} 5
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}} 5
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Every
Everytimetimewe wecall
callfactorial(),
factorial(),
we
we get a new copy ofthe
get a new copy of thelocal
local
variable n that’s independent
variable n that’s independent
ofofall
allthe
theprevious
previouscopies.
copies.
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 4
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 4
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 3
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 3
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 2
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 2
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}} 1
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}} 1
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} int
} ifreturn
if (n
(n
return
else 4
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 0n
}} }} ifreturn
if
else (n
(n
return {3
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {2 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 1 nn ** factorial(n
factorial(n -- 1); 1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} int
} ifreturn
if (n
(n
return
else 4
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 0n
}} }} ifreturn
if
else (n
(n
return {3
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {2 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 1 nn ** factorial(n
factorial(n -- 1); 1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} int
} ifreturn
if (n
(n
return
else 4
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 0n
}} }} ifreturn
if
else (n
(n
return {3
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {2 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 1 nn ** factorial(n
factorial(n -- 1); 1);
}}
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}} 1
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}} 1 1
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}} 1 1
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}} 1 × 1
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} int
} ifreturn
if (n
(n
return
else 5
==
==
factorial(int
{ nn0)** {factorial(n
0) {
factorial(n
n) { -- 1);
1);
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 1n
}} }} ifreturn
if
else (n
(n
return {4
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1;
}}
return
return
}} else {3 nn ** factorial(n
factorial(n -- 1);
1); int n
}} else {
}}
return
return 2nn ** factorial(n
factorial(n -- 1); 1);
}}
}} 1
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 2
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 2 1
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 2 1
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 2 × 1
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int 0)
0) n)
n) { { 5
return
return 1;
1; int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0) {{ n) {
int
}
int else
factorial(int
} else {
factorial(int
{ n) {
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
int
} else
factorial(int
{ n) {
}}int
} elsefactorial(int
{
return
return 1;
1; n) {
int 2n
}} }} ifreturn
if
else (n
(n
return {5
==
== nn0)** {factorial(n
0) {
factorial(n -- 1);
1);
}} else {
return
return 1;
1; int n
}}
return
return
}} else {4 nn ** factorial(n
factorial(n -- 1);
1);
}} else {
}}
return
return 3 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 2
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 3
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 3 2
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 3 2
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 3 × 2
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
int factorial(int==
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
return if
if 0;
(n
(n
0; ==
== 0)
0)
int
}} else
int factorial(int
else {{
factorial(int n)
n) {{
}} return
return 1;
1; int 3n
ifreturn
if (n
(n
return ==
== n
n 0)
0)** {factorial(n
{
factorial(n -- 1);
1);
}} else
else {
{
}} return
returnn 1; 1; int n
}}
return
return
}} else
else {
{5 n ** factorial(n
factorial(n -- 1);
1);
}}
}}
return
return 4 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 6
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 4
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 4 6
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 4 6
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 4 × 6
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout <<
<< "5!
"5! = " << n
= "{{ << n << endl;
int if
if (n
(n ==
==
int factorial(int
factorial(int
0)
0) n)
n) {{ 5
return
return 1;
1; {{ int 4n
return
returnif
if 0;
(n
(n
0; ==
== 0)
0)
}} else {{
elsereturn
}} returnn 1;
return 1;
** factorial(n -- 1); int n
return
}} else
else {
{ n factorial(n 1);
}}
}}
return
return 5 nn ** factorial(n
factorial(n -- 1);1);
}}
}} 24
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}} 5
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}} 5 24
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}} 5 24
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}} 5 × 24
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
int
int factorial(int
factorial(int n)
n) {{ << endl;
cout
cout << "5! = " << n
if <<(n "5!
if (n == = "{{ << n << endl; 5
== 0)
0)
return
return 1;
1; int n
return
return 0;
0;
}} else
else {{
}} return
return nn ** factorial(n
factorial(n -- 1);
1);
}}
}} 120
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5);
cout
cout <<
<< "5!
"5! == "" <<
<< nn <<
<< endl;
endl;
return
return 0;
0;
}}
Recursion in Action
int
int main()
main() {{
int
int nn == factorial(5);
factorial(5); 120
cout
cout <<
<< "5!
"5! == "" <<
<< nn <<
<< endl;
endl; int n
return
return 0;
0;
}}
Thinking Recursively
●
Solving a problem with recursion
requires two steps.
●
First, determine how to solve the
problem for simple cases.
●
This is called the base case.
●
Second, determine how to break down
larger cases into smaller instances.
●
This is called the recursive step.
Recap from Today
●
The C++ compiler reads from the top of the program to
the bottom. You cannot call a function that hasn’t either
been prototyped or defined before the call site.
●
Each time you call a function, C++ gives you a fresh copy
of all the local variables in that function. Those variables
are independent of any other variables with the same
name found elsewhere.
●
You can split a number into “everything but the last digit”
and “the last digit” by dividing and modding by 10.
●
A recursive function is one that calls itself. It has a
base case to handle easy cases and a recursive step to
turn bigger versions of the problem into smaller ones.
●
Functions can be written both iteratively and recursively.
Your Action Items
●
Read Chapter 1 and Chapter 2.
●
We’re still easing into C++. These chapters talk about the
basics and the mechanics of function call and return.
●
Read Chapter 7.
●
We’ve just started talking about recursion. There’s tons of
goodies in that chapter.
●
Sign up for section.
●
The link goes out tomorrow afternoon.
●
Work on Assignment 0.
●
Just over a third of you are already done! Exciting!
Next Time
●
Strings and Streams
●
Representing and Manipulating Text.
●
Recursion on Text.
●
File I/O in C++.
●
More Recursion
●
Getting more comfortable with this strategy.