functions recursion n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Functions : Recursion PowerPoint Presentation
Download Presentation
Functions : Recursion

Loading in 2 Seconds...

play fullscreen
1 / 29

Functions : Recursion - PowerPoint PPT Presentation


  • 71 Views
  • Uploaded on

Functions : Recursion. Lecture 12 4.2.2002. Recursion. a + (a+1) + (a+2) + ... + b = a + ((a+1) + (a+2) + ... + b) sum(a,b) = a + sum(a+1,b) Base case ? factorial (n) = n*factorial(n-1) Base case ?. Recursion. int factorial (int n) { int temp; if (n<=1) return 1;

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Functions : Recursion' - neron


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
functions recursion

Functions : Recursion

Lecture 12

4.2.2002

Sudeshna Sarkar, IIT Kharagpur

recursion
Recursion

a + (a+1) + (a+2) + ... + b

= a + ((a+1) + (a+2) + ... + b)

sum(a,b) = a + sum(a+1,b)

Base case ?

factorial (n) = n*factorial(n-1)

Base case ?

Sudeshna Sarkar, IIT Kharagpur

recursion1
Recursion

int factorial (int n)

{

int temp;

if (n<=1) return 1;

temp=factorial(n-1);

return n*temp;

}

int sum (int a, int b)

{

int temp;

if (a>b) return 0;

temp=sum(a+1,b);

return a+temp;

}

Sudeshna Sarkar, IIT Kharagpur

recursion2
Recursion

1 4

sum(a,b) {

temp=sum(2,4);

return 1+temp;

}

main () {

. . .

x = sum(1,4);

. . .

}

int sum (int a, int b)

{

int temp;

if (a>b) return 0;

temp=sum(a+1,b);

return a+temp;

}

sum(2,4)

{

temp=sum(3,4);

return 2+temp;

}

sum(3,4)

{

temp=sum(4,4);

return 3+temp;

}

sum(4,4)

{

temp=sum(5,4);

return 4+temp;

}

sum(5,4)

{

return 0;

}

Sudeshna Sarkar, IIT Kharagpur

recursion3
Recursion

sum(1,4)

{

temp=sum(2,4);

return 1+temp;

}

main () {

. . .

x = sum(1,5);

. . .

}

int sum (int a, int b)

{

int temp;

if (a>b) return 0;

temp=sum(a+1,b);

return a+temp;

}

sum(2,4)

{

temp=sum(3,4);

return 2+temp;

}

sum(3,4)

{

temp=sum(4,4);

return 3+temp;

}

sum(4,4)

{

temp=0;

return 4;

}

Sudeshna Sarkar, IIT Kharagpur

recursion4
Recursion

sum(1,4)

{

temp=sum(2,4);

return 1+temp;

}

main () {

. . .

x = sum(1,5);

. . .

}

int sum (int a, int b)

{

int temp;

if (a>b) return 0;

temp=sum(a+1,b);

return a+temp;

}

sum(2,4)

{

temp=sum(3,4);

return 2+temp;

}

sum(3,4)

{

temp=4;

return 3+4;

}

Sudeshna Sarkar, IIT Kharagpur

recursion5
Recursion

sum(1,4)

{

temp=sum(2,4);

return 1+temp;

}

main () {

. . .

x = sum(1,5);

. . .

}

int sum (int a, int b)

{

int temp;

if (a<=b) return 0;

temp=sum(a+1,b);

return a+temp;

}

sum(2,4)

{

temp=7;

return 2+7;

}

Sudeshna Sarkar, IIT Kharagpur

recursion6
Recursion

sum(1,4)

{

temp=9;

return 1+9;

}

main () {

. . .

x = sum(1,5);

. . .

}

int sum (int a, int b)

{

int temp;

if (a<=b) return 0;

temp=sum(a+1,b);

return a+temp;

}

Sudeshna Sarkar, IIT Kharagpur

slide9
void foo ()

{

char ch;

scanf (“%c”, &ch);

if (ch==‘\n’) return;

foo ();

printf (“%c”, &ch);

}

What will the program

output on the following

input ?

PDS \n

Sudeshna Sarkar, IIT Kharagpur

example
int sumSquares (int m, int n) {

if (m<n)

/* Recursion */

return sumSquares(m, n-1) + n*n;

else

/* Base Case */

return n*n ;

}

Example

int sumSquares (int m, int n) {

if (m<n)

/* Recursion */

return m*m + sumSquares(m+1, n);

else

/* Base Case */

return m*m ;

}

Sudeshna Sarkar, IIT Kharagpur

example1
Example

int sumSquares (int m, int n) {

int middle ;

if (m==n)

return m*m;

else {

middle = (m+n)/2;

return sumSquares(m,middle)

+ sumSquares(middle+1,n) ;

}

5

. . .

7

8

. . .

10

n

m

mid

mid+1

Sudeshna Sarkar, IIT Kharagpur

call tree
Call Tree

sumSquares(5,10)

sumSquares(5,10)

sumSquares(5,10)

sumSquares(8,10)

sumSquares(5,7)

sumSquares(10,10)

sumSquares(8,9)

sumSquares(7,7)

sumSquares(5,6)

sumSquares(9,9)

sumSquares(6,6)

sumSquares(8,8)

sumSquares(5,5)

Sudeshna Sarkar, IIT Kharagpur

annotated call tree
Annotated Call Tree

355

sumSquares(5,10)

sumSquares(5,10)

245

110

sumSquares(5,10)

sumSquares(8,10)

sumSquares(5,7)

100

49

145

61

sumSquares(10,10)

sumSquares(8,9)

sumSquares(7,7)

sumSquares(5,6)

36

81

25

64

sumSquares(9,9)

sumSquares(6,6)

sumSquares(8,8)

sumSquares(5,5)

49

100

36

81

25

64

Sudeshna Sarkar, IIT Kharagpur

trace
Trace

sumSq(5,10) = (sumSq(5,7) + sumSq(8,10))

= (sumSq(5,6) + (sumSq(7,7))

+ (sumSq(8,9) + sumSq(10,10))

= ((sumSq(5,5) + sumSq(6,6)) + sumSq(7,7))

+ ((sumSq(8,8) + sumSq(9,9)) + sumSq(10,10))

= ((25 + 36) + 49) + ((64 + 81) + 100)

= (61 + 49) + (145 + 100)

= (110 + 245)

= 355

Sudeshna Sarkar, IIT Kharagpur

recursion the general idea
Recursion : The general idea
  • Recursive programs are programs that call themselves
    • to compute the solution to a subproblem having these properties :

1. the subproblem is smaller than the overall problem or, simpler in the sense that it is closer to the final solution

2. the subproblem can be solved directly (as a base case) or recursively by making a recursive call.

3. the subproblem’s solution can be combined with solutions to other subproblems to obtain the solution to the overall problem.

Sudeshna Sarkar, IIT Kharagpur

think recursively
Think recursively
  • Break a big problem into smaller subproblems of the same kind, that can be combined back into the overall solution :

Divide and Conquer

Sudeshna Sarkar, IIT Kharagpur

exercise
Exercise

1. Write a recursive function that computes xn, called power (x, n), where x is a floating point number and n is a non-negative integer.

2. Write an improved recursive version of power(x,n) that works by breaking n down into halves, squaring power(x, n/2), and multiplying by x again if n is odd.

3. To calculate the square root of x (a +ve real) by Newton’s method, we start with an initial approximation a=x/2. If |x-aa| epsilon, we stop with the result a.Otherwise a is replaced with the next approximation, (a+x/a)/2. Write a recursive method, sqrt(x) to compute square root of x by Newton’s method.

Sudeshna Sarkar, IIT Kharagpur

common pitfalls
Common Pitfalls
  • Infinite Regress : a base case is never encountered
    • a base case that never gets called : fact (0)
    • running out of resources :each time a function is called, some space is allocated to store the activation record. With too many nested calls, there may be a problem of space.

int fact (int n) {

if (n==1)

return 1;

return n*fact(n-1);

}

Sudeshna Sarkar, IIT Kharagpur

tower of hanoi
Tower of Hanoi

A

B

C

Sudeshna Sarkar, IIT Kharagpur

tower of hanoi1
Tower of Hanoi

A

B

C

Sudeshna Sarkar, IIT Kharagpur

tower of hanoi2
Tower of Hanoi

A

B

C

Sudeshna Sarkar, IIT Kharagpur

tower of hanoi3
Tower of Hanoi

A

B

C

Sudeshna Sarkar, IIT Kharagpur

slide23

void towers (int n, char from, char to, char aux) {

if (n==1) {

printf (“Disk 1 : %c -> &c \n”, from, to) ;

return ;

}

towers (n-1, from, aux, to) ;

printf (“Disk %d : %c  %c\n”, n, from, to) ;

towers (n-1, aux, to, from) ;

}

Sudeshna Sarkar, IIT Kharagpur

slide24
Disk 1 : A -> C

Disk 2 : A -> B

Disk 1 : C -> B

Disk 3 : A -> C

Disk 1 : B -> A

Disk 2 : B -> C

Disk 1 : A -> C

Disk 4 : A -> B

Disk 1 : C -> B

Disk 2 : C -> A

Disk 1 : B -> A

Disk 3 : C -> B

Disk 1 : A -> C

Disk 2 : A -> B

Disk 1 : C -> B

towers (4, ‘A’, ‘B’, ‘C’) ;

Sudeshna Sarkar, IIT Kharagpur

recursion may be expensive
Recursion may be expensive !
  • Fibonacci Sequence:
    • fib (n) = n if n is 0 or 1
    • fib (n) = fib (n-2) + fib(n-1) if n>= 2.

int fib (int n) {

if (n==0 or n==1)

return 1;

return fib(n-2) + fib(n-1) ;

}

Sudeshna Sarkar, IIT Kharagpur

call tree1
Call Tree

5

fib (5)

2

3

fib (3)

fib (4)

1

2

1

1

fib (1)

fib (2)

fib (2)

fib (3)

1

1

1

0

1

1

0

fib (0)

fib (1)

fib (1)

fib (2)

fib (0)

fib (1)

1

1

1

1

0

0

0

fib (1)

fib (0)

1

0

Sudeshna Sarkar, IIT Kharagpur

iterative fibonacci computation
Iterative fibonacci computation

int fib (int n) {

if (n <= 1)

return n;

lofib = 0 ;

hifib = 1 ;

for (i=2; i<=n; i++) {

x = lofib ;

lofib = hifib ;

hifib = x + lofib;

}

return hifib ;

}

i = 2 3 4 5 6 7

x = 0 1 1 2 3 5

lofib= 0 1 1 2 3 5 8

hifib= 1 1 2 3 5 8 13

Sudeshna Sarkar, IIT Kharagpur

merge sort
Merge Sort
  • To sort an array of N elements,
    • 1. Divide the array into two halves. Sort each half.
    • 2. Combine the two sorted subarrays into a single sorted array
    • Base Case ?

Sudeshna Sarkar, IIT Kharagpur

binary search revisited
Binary Search revisited
  • To search if key occurs in an array A (size N) sorted in ascending order:
  • mid = N/2;
    • if (key == N/2) item has been found
    • if (key < N/2) search for the key in A[0..mid-1]
    • if (key > N/2) search for key in A[mid+1..N]
  • Base Case ?

Sudeshna Sarkar, IIT Kharagpur