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

09 Recursion

The document outlines recursion and provides examples using recursion to calculate factorials and the Fibonacci sequence. It defines recursive functions as functions that call themselves, with a base case to stop further recursion. Recursive functions break problems into smaller subproblems until the base case is reached. Examples show recursive functions to calculate factorials and Fibonacci numbers, with pseudocode and C++ implementations. Iteration is also introduced as an alternative to recursion for repetition tasks using explicit loops rather than repeated function calls.

Uploaded by

amramr.elbrns78
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views

09 Recursion

The document outlines recursion and provides examples using recursion to calculate factorials and the Fibonacci sequence. It defines recursive functions as functions that call themselves, with a base case to stop further recursion. Recursive functions break problems into smaller subproblems until the base case is reached. Examples show recursive functions to calculate factorials and Fibonacci numbers, with pseudocode and C++ implementations. Iteration is also introduced as an alternative to recursion for repetition tasks using explicit loops rather than repeated function calls.

Uploaded by

amramr.elbrns78
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 13

Outline

CSE131: Computer Programming

Recursion

Prof. Mahmoud Khalil

 2003 Prentice Hall, Inc.


All rights reserved.
2

Recursion
Outline
 Recursion
 Example Using Recursion: The Fibonacci Series

 Recursion vs. Iteration


 Functions with Empty Parameter Lists

 2003 Prentice Hall, Inc. All rights reserved.


3

Recursion

• Recursive functions
– Functions that call themselves
– Can only solve a base case
• If not base case
– Break problem into smaller problem(s)
– Launch new copy of function to work on the smaller
problem (recursive call/recursive step)
• Slowly converges towards base case
• Function makes call to itself inside the return statement
– Eventually base case gets solved
• Answer works way back up, solves entire problem

 2003 Prentice Hall, Inc. All rights reserved.


4

Recursion

• Example: factorial
n! = n * ( n – 1 ) * ( n – 2 ) * … * 1
– Recursive relationship ( n! = n * ( n – 1 )! )
5! = 5 * 4!
4! = 4 * 3!…
– Base case (1! = 0! = 1)

 2003 Prentice Hall, Inc. All rights reserved.


5
1 // Fig. 3.14: fig03_14.cpp
2 // Recursive factorial function.
Outline
3 #include <iostream>
4
5 using std::cout;
fig03_14.cpp
6 using std::endl; (1 of 2)
7
8 #include <iomanip>
Data type unsigned long
9
10 using std::setw;
can hold an integer from 0 to
11 4 billion.
12 unsigned long factorial( unsigned long ); // function prototype
13
14 int main()
15 {
16 // Loop 10 times. During each iteration, calculate
17 // factorial( i ) and display result.
18 for ( int i = 0; i <= 10; i++ )
19 cout << setw( 2 ) << i << "! = "
20 << factorial( i ) << endl;
21
22 return 0; // indicates successful termination
23
24 } // end main

 2003 Prentice Hall, Inc.


All rights reserved.
6
25
26 // recursive definition of function factorial
Outline
27 The base
unsigned long factorial( unsigned long number ) case occurs when we
28 { have 0! or 1!. All other cases
fig03_14.cpp
29 // base case must be split up (recursive
(2 of 2)
30 if ( number <= 1 ) step).
31 return 1;
32 fig03_14.cpp
33 // recursive step output (1 of 1)
34 else
35 return number * factorial( number - 1 );
36
37 } // end function factorial

0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800

 2003 Prentice Hall, Inc.


All rights reserved.
7

Example Using Recursion: Fibonacci Series

• Fibonacci series: 0, 1, 1, 2, 3, 5, 8...


– Each number sum of two previous ones
– Example of a recursive formula:
• fib(n) = fib(n-1) + fib(n-2)
• C++ code for Fibonacci function
long fibonacci( long n )
{
if ( n == 0 || n == 1 ) // base case
return n;
else
return fibonacci( n - 1 ) +
fibonacci( n – 2 );
}

 2003 Prentice Hall, Inc. All rights reserved.


8

Example Using Recursion: Fibonacci Series

f( 3 )

return f( 2 ) + f( 1 )

return f( 1 ) + f( 0 ) return 1

return 1 return 0

 2003 Prentice Hall, Inc. All rights reserved.


9

Example Using Recursion: Fibonacci Series

• Order of operations
– return fibonacci( n - 1 ) + fibonacci( n - 2 );
• Do not know which one executed first
– C++ does not specify
– Only &&, || and ?: guaranteed left-to-right evaluation
• Recursive function calls
– Each level of recursion doubles the number of function calls
• 30th number = 2^30 ~ 4 billion function calls
– Exponential complexity

 2003 Prentice Hall, Inc. All rights reserved.


10
1 // Fig. 3.15: fig03_15.cpp
2 // Recursive fibonacci function.
Outline
3 #include <iostream>
4
5 using std::cout;
fig03_15.cpp
The Fibonacci numbers get (1 of 2)
6 using std::cin;
7 using std::endl;
large very quickly, and are all
8 non-negative integers. Thus,
9 we useprototype
unsigned long fibonacci( unsigned long ); // function the unsigned
10 long data type.
11 int main()
12 {
13 unsigned long result, number;
14
15 // obtain integer from user
16 cout << "Enter an integer: ";
17 cin >> number;
18
19 // calculate fibonacci value for number input by user
20 result = fibonacci( number );
21
22 // display result
23 cout << "Fibonacci(" << number << ") = " << result << endl;
24
25 return 0; // indicates successful termination

 2003 Prentice Hall, Inc.


All rights reserved.
11
26
27 } // end main
Outline
28
29 // recursive definition of function fibonacci
30 unsigned long fibonacci( unsigned long n )
fig03_15.cpp
31 { (2 of 2)
32 // base case
33 if ( n == 0 || n == 1 ) fig03_15.cpp
34 return n; output (1 of 2)
35
36 // recursive step
37 else
38 return fibonacci( n - 1 ) + fibonacci( n - 2 );
39
40 } // end function fibonacci

Enter an integer: 0
Fibonacci(0) = 0

Enter an integer: 1
Fibonacci(1) = 1

Enter an integer: 2
Fibonacci(2) = 1

Enter an integer: 3
Fibonacci(3) = 2

 2003 Prentice Hall, Inc.


All rights reserved.
12
Enter an integer: 4
Fibonacci(4) = 3
Outline

Enter an integer: 5
Fibonacci(5) = 5
fig03_15.cpp
output (2 of 2)
Enter an integer: 6
Fibonacci(6) = 8

Enter an integer: 10
Fibonacci(10) = 55

Enter an integer: 20
Fibonacci(20) = 6765

Enter an integer: 30
Fibonacci(30) = 832040

Enter an integer: 35
Fibonacci(35) = 9227465

 2003 Prentice Hall, Inc.


All rights reserved.
13

Recursion vs. Iteration

• Repetition
– Iteration: explicit loop
– Recursion: repeated function calls
• Termination
– Iteration: loop condition fails
– Recursion: base case recognized
• Both can have infinite loops
• Balance between performance (iteration) and good
software engineering (recursion)

 2003 Prentice Hall, Inc. All rights reserved.

You might also like