Recursion C programming exercises_ Recursion - w3resource.ppt
1. 2000 Prentice Hall, Inc.
All rights reserved.
Lecture 5 - Recursion
2. 2000 Prentice Hall, Inc.
All rights reserved.
Ex. 1: The Handshake Problem
There are n people in a room. If each person
shakes hands once with every other person. What
is the total number h(n) of handshakes?
h(2) = 1
h(3) = h(2) + 2
h(4) = h(3) + 3
h(n) = h(n-1) + n-1
h(n): Sum of integer from 1 to n-1 = n(n-1) / 2
3. 2000 Prentice Hall, Inc.
All rights reserved.
Recursion
• In some problems, it may be natural to define the
problem in terms of the problem itself.
• Recursion is useful for problems that can be
represented by a simpler version of the same
problem.
4. 2000 Prentice Hall, Inc.
All rights reserved.
Chapter 7: Recursion 4
Recursive Thinking
• Recursion is:
– A problem-solving approach, that can ...
– Generate simple solutions to ...
– Certain kinds of problems that ...
– Would be difficult to solve in other ways
• Recursion splits a problem:
– Into one or more simpler versions of itself
5. 2000 Prentice Hall, Inc.
All rights reserved.
Chapter 7: Recursion 5
Recursive Thinking: The General
Approach
1. if problem is “small enough”
2. solve it directly
3. else
4. break into one or more smaller subproblems
5. solve each subproblem recursively
6. combine results into solution to whole problem
6. 2000 Prentice Hall, Inc.
All rights reserved.
Recursion
• Recursive functions
– Functions that call themselves
– Can only solve a base case
– Divide a problem up into
• What it can do
• What it cannot do
– What it cannot do resembles original problem
– The function launches a new copy of itself (recursion
step) to solve what it cannot do
– Eventually base case gets solved
• Gets plugged in, works its way up and solves whole problem
7. 2000 Prentice Hall, Inc.
All rights reserved.
Recursion
• Example: factorials
– 5! = 5 * 4 * 3 * 2 * 1
– Notice that
• 5! = 5 * 4!
• 4! = 4 * 3! ...
– Can compute factorials recursively
– Solve base case (1! = 0! = 1) then plug in
• 2! = 2 * 1! = 2 * 1 = 2;
• 3! = 3 * 2! = 3 * 2 = 6;
8. 2000 Prentice Hall, Inc.
All rights reserved.
Example Using Recursion: The Fibonacci
Series
• Fibonacci series: 0, 1, 1, 2, 3, 5, 8...
– Each number is the sum of the previous two
– Can be solved recursively:
• fib( n ) = fib( n - 1 ) + fib( n – 2 )
– Code for the fibaonacci function
long fibonacci( long n )
{
if (n == 0 || n == 1) // base case
return n;
else
return fibonacci( n - 1) +
fibonacci( n – 2 );
}
9. 2000 Prentice Hall, Inc.
All rights reserved.
Example Using Recursion: The Fibonacci
Series
• Set of recursive calls to function fibonacci
f( 3 )
f( 1 )
f( 2 )
f( 1 ) f( 0 ) return 1
return 1 return 0
return +
+
return
10. 2000 Prentice Hall, Inc.
All rights reserved.
Outline
Outline
1. Function prototype
1.1 Initialize variables
2. Input an integer
2.1 Call function
fibonacci
2.2 Output results.
3. Define fibonacci
recursively
Program Output
1 /* Fig. 5.15: fig05_15.c
2 Recursive fibonacci function */
3 #include <stdio.h>
4
5 long fibonacci( long );
6
7 int main()
8 {
9 long result, number;
10
11 printf( "Enter an integer: " );
12 scanf( "%ld", &number );
13 result = fibonacci( number );
14 printf( "Fibonacci( %ld ) = %ldn", number, result );
15 return 0;
16 }
17
18 /* Recursive definition of function fibonacci */
19 long fibonacci( long n )
20 {
21 if ( n == 0 || n == 1 )
22 return n;
23 else
24 return fibonacci( n - 1 ) + fibonacci( n - 2 );
25 }
Enter an integer: 0
Fibonacci(0) = 0
Enter an integer: 1
Fibonacci(1) = 1
11. 2000 Prentice Hall, Inc.
All rights reserved.
Outline
Outline
Program Output
Enter an integer: 2
Fibonacci(2) = 1
Enter an integer: 3
Fibonacci(3) = 2
Enter an integer: 4
Fibonacci(4) = 3
Enter an integer: 5
Fibonacci(5) = 5
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
12. 2000 Prentice Hall, Inc.
All rights reserved.
Example: Exponential function
• How to write exp(int numb, int power) recursively?
int exp(int numb, int power){
if(power ==0)
return 1;
return numb * exp(numb, power -1);
}
13. 2000 Prentice Hall, Inc.
All rights reserved.
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
– Choice between performance (iteration) and good software
engineering (recursion)