Functions in C++ Section Signups Section signups open tomorrow at - - PowerPoint PPT Presentation

functions in c
SMART_READER_LITE
LIVE PREVIEW

Functions in C++ Section Signups Section signups open tomorrow at - - PowerPoint PPT Presentation

Functions in C++ Section Signups Section signups open tomorrow at 5PM and close Sunday at 5PM. Sign up for section at http://cs198.stanford.edu/section Link available on the CS106B course website. Getting Started with C++ C++


slide-1
SLIDE 1

Functions in C++

slide-2
SLIDE 2

Section Signups

  • Section signups open tomorrow at 5PM

and close Sunday at 5PM.

  • Sign up for section at

http://cs198.stanford.edu/section

  • Link available on the CS106B course

website.

slide-3
SLIDE 3

Getting Started with C++

slide-4
SLIDE 4

C++ Functions

  • Functions in C++ are similar to methods

in Java:

  • Piece of code that performs some task.
  • Can accept parameters.
  • Can return a value.
  • Syntax similar to Java:

return-type function-name(parameters) { /* … function body … */ }

Note: no public or private.

slide-5
SLIDE 5

The main Function

  • A C++ program begins execution in a

function called main with the following signature: int main() { /* … code to execute … */ }

  • By convention, main should return 0 unless

the program encounters an error.

slide-6
SLIDE 6

A Simple C++ Program

slide-7
SLIDE 7

What Went Wrong?

slide-8
SLIDE 8

One-Pass Compilation

  • Unlike some languages like Java or C#,

C++ has a one-pass compiler.

  • If a function has not yet been declared

when you try to use it, you will get a compiler error.

  • To fix this, you can do one of two things:
  • Reorder the functions in your source files so

that everything is declared before it is used.

  • Use a function prototype to tell the compiler

to expect a function later on.

slide-9
SLIDE 9

Function Prototypes

  • A function prototype is a declaration that

tells the C++ compiler about an upcoming function.

  • Syntax:

return-type function-name(parameters);

  • A function can be used if the compiler

has seen either the function itself or its prototype.

slide-10
SLIDE 10

Getting Input from the User

  • In C++, we use cout to display text.
  • We can also use cin to receive input.
  • For technical reasons, we've written some functions for you

that do input.

  • Take CS106L to see why!
  • The library "simpio.h" contains methods for reading input:

int getInteger(string prompt = ""); double getReal(string prompt = ""); string getLine(string prompt = "");

slide-11
SLIDE 11

Getting Input from the User

  • In C++, we use cout to display text.
  • We can also use cin to receive input.
  • For technical reasons, we've written some functions for you

that do input.

  • Take CS106L to see why!
  • The library "simpio.h" contains methods for reading input:

int getInteger(string prompt = ""); double getReal(string prompt = ""); string getLine(string prompt = "");

These functions have default

  • arguments. If you don't specify a

prompt, it will use the empty string. These functions have default

  • arguments. If you don't specify a

prompt, it will use the empty string.

slide-12
SLIDE 12

Factorials

  • The number n factorial, denoted n!, is

n × (n – 1) × … × 3 × 2 × 1

  • For example:
  • 3! = 3 × 2 × 1 = 6.
  • 5! = 5 × 4 × 3 × 2 × 1 = 120
  • 0! = 1 (by definition)
  • Factorials show up everywhere:
  • Taylor series.
  • Counting ways to shuffle a deck of cards.
  • Determining how quickly computers can sort values (more
  • n that later this quarter).
slide-13
SLIDE 13

Digital Roots

  • The digital root of a number can be found as

follows:

  • If the number is just one digit, then it's its own

digital root.

  • If the number is multiple digits, add up all the digits

and repeat.

  • For example:
  • 5 has digital root 5.
  • 42 → 4 + 2 = 6, so 42 has digital root 6.
  • 137 → 1 + 3 + 7 = 11, 11 → 1 + 1 = 2, so 137 has

digital root 2.

slide-14
SLIDE 14

Working One Digit at a Time

1 2 5 8 1 2 5 8

1258 % 10

slide-15
SLIDE 15

Working One Digit at a Time

1 2 5 8 1 2 5 8

1258 / 10 1258 % 10

slide-16
SLIDE 16

Thinking Recursively

slide-17
SLIDE 17

Factorial Revisited

5! = 4 5 × 2 3 1 × × ×

slide-18
SLIDE 18

Factorial Revisited

5! = 4 5 × 2 3 1 × × ×

slide-19
SLIDE 19

Factorial Revisited

5! = 4 5 × 2 3 1 × × × 4!

slide-20
SLIDE 20

Factorial Revisited

5! = 4! 5 ×

slide-21
SLIDE 21

Factorial Revisited

5! = 4! 5 ×

slide-22
SLIDE 22

Factorial Revisited

5! = 4! 5 × 4! = 4 2 3 1 × × ×

slide-23
SLIDE 23

Factorial Revisited

5! = 4! 5 × 4! = 4 2 3 1 × × ×

slide-24
SLIDE 24

Factorial Revisited

5! = 4! 5 × 4! = 4 2 3 1 × × × 3!

slide-25
SLIDE 25

Factorial Revisited

5! = 4! 5 × 4! = 4 3! ×

slide-26
SLIDE 26

Factorial Revisited

5! = 4! 5 × 4! = 4 3! ×

slide-27
SLIDE 27

Factorial Revisited

5! = 4! 5 × 4! = 4 3! × 3! = 3 × 2 1 ×

slide-28
SLIDE 28

Factorial Revisited

5! = 4! 5 × 4! = 4 3! × 3! = 3 × 2 1 ×

slide-29
SLIDE 29

Factorial Revisited

5! = 4! 5 × 4! = 4 3! × 3! = 3 × 2 1 × 2!

slide-30
SLIDE 30

Factorial Revisited

5! = 4! 5 × 4! = 4 3! × 3! = 3 × 2!

slide-31
SLIDE 31

Factorial Revisited

5! = 4! 5 × 4! = 4 3! × 3! = 2! 3 ×

slide-32
SLIDE 32

Factorial Revisited

5! = 4! 5 × 4! = 4 3! × 3! = 2! 3 × 2! = 1! 2 ×

slide-33
SLIDE 33

Factorial Revisited

5! = 4! 5 × 4! = 4 3! × 3! = 2! 3 × 2! = 1! 2 × 1! = 0! 1 ×

slide-34
SLIDE 34

Factorial Revisited

5! = 4! 5 × 4! = 4 3! × 3! = 2! 3 × 2! = 1! 2 × 1! = 0! 1 × 0! = 1

slide-35
SLIDE 35

Another View of Factorials

n! = 1 if n = 0 n × (n – 1)! otherwise

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

slide-36
SLIDE 36

Another View of Factorials

n! = 1 if n = 0 n × (n – 1)! otherwise

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

slide-37
SLIDE 37

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; }

slide-38
SLIDE 38

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; }

slide-39
SLIDE 39

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

slide-40
SLIDE 40

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

slide-41
SLIDE 41

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

slide-42
SLIDE 42

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

slide-43
SLIDE 43

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

slide-44
SLIDE 44

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

slide-45
SLIDE 45

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

slide-46
SLIDE 46

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

slide-47
SLIDE 47

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

slide-48
SLIDE 48

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

slide-49
SLIDE 49

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

slide-50
SLIDE 50

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

slide-51
SLIDE 51

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

slide-52
SLIDE 52

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

slide-53
SLIDE 53

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

slide-54
SLIDE 54

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

slide-55
SLIDE 55

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

1 int n

slide-56
SLIDE 56

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

1 int n

slide-57
SLIDE 57

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

1 int n

slide-58
SLIDE 58

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

1 int n

slide-59
SLIDE 59

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

1 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

int n

slide-60
SLIDE 60

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

1 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

int n

slide-61
SLIDE 61

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

1 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

int n

slide-62
SLIDE 62

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

1 int n

slide-63
SLIDE 63

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

1 int n

1

slide-64
SLIDE 64

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

slide-65
SLIDE 65

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

2 int n

1

slide-66
SLIDE 66

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

slide-67
SLIDE 67

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

3 int n

2

slide-68
SLIDE 68

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

slide-69
SLIDE 69

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

4 int n

6

slide-70
SLIDE 70

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

slide-71
SLIDE 71

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }

5 int n

24

slide-72
SLIDE 72

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; }

slide-73
SLIDE 73

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; }

120 int n

slide-74
SLIDE 74

Recursion in Action

int main() { int n = factorial(5); cout << "5! = " << n << endl; } int main() { int n = factorial(5); cout << "5! = " << n << endl; }

120 int n

slide-75
SLIDE 75

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 decomposition.
slide-76
SLIDE 76

Thinking Recursively

if (problem is sufficiently simple) { Directly solve the problem. Return the solution. } else { Split the problem up into one or more smaller problems with the same structure as the original. Solve each of those smaller problems. Combine the results to get the overall solution. Return the overall solution. }

slide-77
SLIDE 77

Summing Up Digits

  • One way to compute the sum of the digits of a

number is shown here:

int sumOfDigits(int n) { int result = 0; while (n != 0) { result += n % 10; n /= 10; } return result; }

  • How would we rewrite this function recursively?
slide-78
SLIDE 78

Summing Up Digits

1 2 5 8 1 2 5 8

The sum of these digits

  • f this number...

The sum of these digits

  • f this number...

is equal to the sum of the digits of this number... is equal to the sum of the digits of this number...

slide-79
SLIDE 79

Summing Up Digits

1 2 5 8 1 2 5 8

The sum of these digits

  • f this number...

The sum of these digits

  • f this number...

is equal to the sum of the digits of this number... is equal to the sum of the digits of this number... plus this number. plus this number.

slide-80
SLIDE 80

Summing Up Digits

  • A recursive implementation of sumOfDigits is shown

here:

int sumOfDigits(int n) { if (n < 10) { return n; } else { return (n % 10) + sumOfDigits(n / 10); } }

  • Notice the structure:
  • If the problem is sufficiently simple, solve it directly.
  • Otherwise, reduce it to a smaller instance and solve that
  • ne.
slide-81
SLIDE 81

Computing Digital Roots

  • One way of computing a digital root is shown

here: int digitalRoot(int n) { while (n >= 10) { n = sumOfDigits(n); } return n; }

  • How might we rewrite this function recursively?
slide-82
SLIDE 82

Digital Roots

slide-83
SLIDE 83

Digital Roots

9 2 5 8

The digital root of

slide-84
SLIDE 84

Digital Roots

9 2 5 8

The digital root of is the same as

slide-85
SLIDE 85

Digital Roots

9 2 5 8

The digital root of The digital root of is the same as

9 2 5 8 + + +

slide-86
SLIDE 86

Digital Roots

9 2 5 8

The digital root of The digital root of is the same as

2 4

slide-87
SLIDE 87

Digital Roots

9 2 5 8

The digital root of The digital root of is the same as

2 4

which is the same as

slide-88
SLIDE 88

Digital Roots

9 2 5 8

The digital root of The digital root of is the same as

2 4

which is the same as The digital root of 2

4 +

slide-89
SLIDE 89

Digital Roots

9 2 5 8

The digital root of The digital root of is the same as

2 4

which is the same as The digital root of 6

slide-90
SLIDE 90

Computing Digital Roots

  • Here is one recursive solution:

int digitalRoot(int n) { if (n < 10) { return n; } else { return digitalRoot(sumOfDigits(n)); } }

  • Again, notice the structure:
  • Check if the problem is simple enough to solve directly.
  • If not, solve a smaller version of the same problem.
slide-91
SLIDE 91

Next Time

  • Strings and Streams
  • Representing and manipulating text.
  • File I/O in C++.