Chapter 9 Recursion. Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-2 Recursive Function recursive functionThe recursive function is –a.

Slides:



Advertisements
Similar presentations
CSC 205 Programming II Lecture 10 Towers of Hanoi.
Advertisements

Lesson 19 Recursion CS1 -- John Cole1. Recursion 1. (n) The act of cursing again. 2. see recursion 3. The concept of functions which can call themselves.
Chapter 10 Recursion Instructor: alkar/demirer. Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-2 Recursive Function recursive functionThe.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 14: Recursion by.
Chapter 10 Recursion Dr. Jiung-yao Huang Dept. Comm. Eng. Nat. Chung Cheng Univ. TA: 鄭筱親 陳昱豪.
Recursion CS-240/CS341. What is recursion? a function calls itself –direct recursion a function calls its invoker –indirect recursion f f1 f2.
Chapter 10 Recursion. Copyright © 2005 Pearson Addison-Wesley. All rights reserved Chapter Objectives Explain the underlying concepts of recursion.
ICS103 Programming in C Lecture 11: Recursive Functions
Chapter 10: Recursion CS 201 Program Design with C Department of CS, Montana State University Mahmud Shahriar Hossain.
Chapter 15 Recursive Algorithms. 2 Recursion Recursion is a programming technique in which a method can call itself to solve a problem A recursive definition.
Recursion A recursive function is a function that calls itself either directly or indirectly through another function. The problems that can be solved.
Chapter 2 Recursion: The Mirrors. © 2005 Pearson Addison-Wesley. All rights reserved2-2 Recursive Solutions Recursion is an extremely powerful problem-
Recursion In general there are two approaches to writing repetitive algorithms. One uses loops(while, do while and for): the other uses recursion. Recursion.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 19: Recursion.
Recursion Chapter 7 Copyright ©2012 by Pearson Education, Inc. All rights reserved.
Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
Chapter 14: Recursion Starting Out with C++ Early Objects
Recursion Chapter Nature of Recursion t Problems that lend themselves to a recursive solution have the following characteristics: –One or more.
 2003 Prentice Hall, Inc. All rights reserved. 1 Functions and Recursion Outline Function Templates Recursion Example Using Recursion: The Fibonacci Series.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12: Recursion Problem Solving, Abstraction, and Design using C++
Copyright © 2015 Pearson Education, Inc. Publishing as Pearson Addison-Wesley C H A P T E R 12 Recursion.
Chapter 9: Recursion1 CHAPTER 9 RECURSION. Recursion  Concept of recursion  A recursive: Benefit and Cost  Comparison : Iterative and recursive functions.
Data Structures and Abstractions with Java, 4e Frank Carrano
Recursion Textbook chapter Recursive Function Call a recursive call is a function call in which the called function is the same as the one making.
Review Introduction to Searching External and Internal Searching Types of Searching Linear or sequential search Binary Search Algorithms for Linear Search.
Chapter 8 Recursion Modified.
Chapter 4 Recursion. Copyright © 2004 Pearson Addison-Wesley. All rights reserved.1-2 Chapter Objectives Explain the underlying concepts of recursion.
Java Programming: Guided Learning with Early Objects Chapter 11 Recursion.
Data Structure and Algorithms. Algorithms: efficiency and complexity Recursion Reading Algorithms.
JAVA: An Introduction to Problem Solving & Programming, 7 th Ed. By Walter Savitch ISBN © 2015 Pearson Education, Inc., Upper Saddle River,
Maitrayee Mukerji. Factorial For any positive integer n, its factorial is n! is: n! = 1 * 2 * 3 * 4* ….* (n-1) * n 0! = 1 1 ! = 1 2! = 1 * 2 = 2 5! =
chap10 Chapter 10 Recursion chap10 2 Recursive Function recursive function The recursive function is a kind of function that calls.
Program Development and Design Using C++, Third Edition
1 CSC 143 Recursion [Reading: Chapter 17]. 2 Recursion  A recursive definition is one which is defined in terms of itself.  Example:  Sum of the first.
Lecture 11 Recursion. A recursive function is a function that calls itself either directly, or indirectly through another function; it is an alternative.
1 Dr. Chow-Sing LinRecursion - CH 10 Problem Solving and Program Design in C Chapter 9 Recursion Chow-Sing Lin.
Recursion You may have seen mathematical functions defined using recursion Factorial(x) = 1 if x
Recursion.
CS212: Data Structures and Algorithms
Chapter Topics Chapter 16 discusses the following main topics:
Chapter 19: Recursion.
Recursion The programs discussed so far have been structured as functions that invoke one another in a disciplined manner For some problems it is useful.
Topic 6 Recursion.
Recursion what is it? how to build recursive algorithms
Chapter 15 Recursion.
CprE 185: Intro to Problem Solving (using C)
Chapter 10 Recursion Instructor: Yuksel / Demirer.
Chapter 10 Recursion Dr. Jiung-yao Huang Dept. Comm. Eng.
Recursion A problem solving technique where an algorithm is defined in terms of itself A recursive method is a method that calls itself A recursive algorithm.
Chapter 17 Recursion.
Recursion Chapter 12.
Chapter 15 Recursion.
Recursive Thinking Chapter 9 introduces the technique of recursive programming. As you have seen, recursive programming involves spotting smaller occurrences.
Data Structures Recursion CIS265/506: Chapter 06 - Recursion.
Recursive Thinking Chapter 9 introduces the technique of recursive programming. As you have seen, recursive programming involves spotting smaller occurrences.
Chapter 10 Recursion.
Recursion "To understand recursion, one must first understand recursion." -Stephen Hawking.
Chapter 17 Recursion.
Programming application CC213
Fundamentals of Programming
Recursion Data Structures.
Recursion Chapter 18.
7.Recursion Recursion is the name given for expression anything in terms of itself. Recursive function is a function which calls itself until a particular.
Chapter 17 Recursion.
CSC 143 Recursion.
Dr. Sampath Jayarathna Cal Poly Pomona
Chapter 3 :Recursion © 2011 Pearson Addison-Wesley. All rights reserved.
ICS103 Programming in C Lecture 11: Recursive Functions
Recursion: The Mirrors
Presentation transcript:

Chapter 9 Recursion

Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-2 Recursive Function recursive functionThe recursive function is –a kind of function that calls itself, or –a function that is part of a cycle in the sequence of function calls. f1 f2fn … An alternative to iteration (looping) A recursive solution is less efficient than an iterative solution in terms of computer time due to the overhead for the extra function calls.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-3 Problems Suitable for Recursive Functions One or more simple cases of the problem have a straightforward solution. The other cases can be redefined in terms of problems that are closer to the simple cases. If this is a simple case solve it else redefine the problem using recursion

Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-4 Splitting a Problem into Smaller Problems Assume that the problem of size 1 can be solved easily (i.e., the simple case). We can recursively split the problem into a problem of size 1 and another problem of size n-1.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-5 An Example of Recursive Function We can implement the multiplication by addition. The simple case is “m*1=m.” The recursive step uses the following equation: “m*n = m+m*(n-1).”

Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-6 #include int main(){ int var1,var2; printf("Enter first variable:"); scanf("%d",&var1); printf("Enter second variable:"); scanf("%d",&var2); printf("Result: %d\n",multiply(var1,var2)); return 0; } Main Section of Recursive multiply

Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-7 Trace of Function multiply(6,3) The simple case. The recursive step.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-8 Terminating Condition terminating conditionsThe recursive functions always contains one or more terminating conditions. –A condition when a recursive function is processing a simple case instead of processing recursion. Without the terminating condition, the recursive function may run forever. –e.g., in the previous multiply function, the if statement “ if (n == 1) … ” is the terminating condition.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved.10-9 Recursive Function to Count a Character in a String We can count the number of occurrences of a given character in a string. –e.g., the number of ‘s’ in “Mississippi” is 4. The terminating condition.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved #include int count(char ch, const char *str); int main(){ char cumle[]="maltepe universitesi"; printf("No of Found = %d\n",count('e',cumle)); return 0; } Main Section

Copyright ©2004 Pearson Addison-Wesley. All rights reserved A Recursive Function that Reverses Input Words (1/2) The recursive concept can be used to reverse an input string. –It can also be done without recursion. The first scanned word is last printed. The scanned word will not be printed until the recursion finishes.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved A Recursive Function that Reverses Input Words (2/2) Note that the recursive function is just an alternative solution to a problem. –You can always solve the problem without recursion.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved #include #define WORDSIZ 20 void reverse_input_words(int); int main(){ int wordcount; printf("How many words will be entered?:"); scanf("%d",&wordcount); reverse_input_words(wordcount); return 0; } Main Section

Copyright ©2004 Pearson Addison-Wesley. All rights reserved How C Maintains the Recursive Steps stackC keeps track of the values of variables by the stack data structure. –Recall that stack is a data structure where the last item added is the first item processed. –There are two operations (push and pop) associated with stack. abcabc bcbc dbcdbc poppush d

Copyright ©2004 Pearson Addison-Wesley. All rights reserved How C Maintains the Recursive Steps Each time a function is called, the execution state of the caller function (e.g., parameters, local variables, and memory address) are pushed onto the stack. When the execution of the called function is finished, the execution can be restored by popping up the execution state from the stack. This is sufficient to maintain the execution of the recursive function. –The execution state of each recursive step are stored and kept in order in the stack.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved How to Trace Recursive Functions The recursive function is not easy to trace and to debug. –If there are hundreds of recursive steps, it is not useful to set the breaking point or to trace step-by-step. A naïve but useful approach is inserting printing statements and then watching the output to trace the recursive steps. Watch the input arguments passed into each recursive step.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved #include int main(){ int var1,var2; printf("Enter first variable:"); scanf("%d",&var1); printf("Enter second variable:"); scanf("%d",&var2); printf("Result : %d\n",multiply(var1,var2)); return 0; }

Copyright ©2004 Pearson Addison-Wesley. All rights reserved int multiply(int m, int n) { int ans; // for tracing printf("Entering multiply with m = %d, n = %d\n", m, n); if (n == 1) ans = m; /* simple case */ else ans = m + multiply(m, n - 1); /* recursive step */ return (ans); }

Copyright ©2004 Pearson Addison-Wesley. All rights reserved Recursive factorial Function Many mathematical functions can be defined and solved recursively. n! –The following is a function that computes n!.

chap10 20

Copyright ©2004 Pearson Addison-Wesley. All rights reserved #include int factorial(int n); int main(){ int a; printf("Enter an integer:"); scanf("%d",&a); printf("%d\n",factorial(a)); return 0; } Main Section

Copyright ©2004 Pearson Addison-Wesley. All rights reserved Iterative factorial Function The previous factorial function can also be implemented by a for loop. iterative recursive –The iterative implementation is usually more efficient than recursive implementation.

Fibonacci numbers Fibonacci numbers:Fibonacci numbers 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,... where each number is the sum of the preceding two. Recursive definition: –F(0) = 0; –F(1) = 1; –F(number) = F(number-1)+ F(number- 2);

Copyright ©2004 Pearson Addison-Wesley. All rights reserved Recursive fibonacci Function fibonacci function. –It can be easily solved by the recursive function –But the recursive function is inefficient because the same fibonacci values may be computed more than once.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved #include int fibonacci(int n); int main(){ int a; printf("Enter an integer:"); scanf("%d",&a); printf("%d\n", fibonacci(a)); return 0; } Main Section

Copyright ©2004 Pearson Addison-Wesley. All rights reserved Recursive gcd Function Generally speaking, if the algorithm to a problem is defined recursively in itself, we would tend to use the recursive function. e.g., the greatest common divisor (GCD) of two integers m and n can be defined recursively. –gcd(m,n) is n if n divides m evenly; –gcd(m,n) is gcd(n, remainder of m divided by n) otherwise.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved int main(void) { int n1, n2; printf("Enter two positive integers separated by a space> "); scanf("%d%d", &n1, &n2); printf("Their greatest common divisor is %d\n", gcd(n1, n2)); return (0); } Main Section

Copyright ©2004 Pearson Addison-Wesley. All rights reserved A Classical Case: Towers of Hanoi The towers of Hanoi problem involves moving a number of disks (in different sizes) from one tower (or called “peg”) to another. –The constraint is that the larger disk can never be placed on top of a smaller disk. –Only one disk can be moved at each time –Assume there are three towers available. SourceTempDestination

Copyright ©2004 Pearson Addison-Wesley. All rights reserved A Classical Case: Towers of Hanoi

Copyright ©2004 Pearson Addison-Wesley. All rights reserved A Classical Case: Towers of Hanoi This problem can be solved easily by recursion. Algorithm: if n is 1 then move disk 1 from the source tower to the destination tower else 1. move n-1 disks from the source tower to the temp tower. 2. move disk n from the source tower to the destination tower. 3. move n-1 disks from the temp tower to the source tower.

Copyright ©2004 Pearson Addison-Wesley. All rights reserved A Classical Case: Towers of Hanoi The recursive step

Copyright ©2004 Pearson Addison-Wesley. All rights reserved #include void tower(char, char, char, int); int main(void) { char from_peg, to_peg, aux_peg; int num_of_disk; printf("Input from_peg, to_peg, aux_peg, num_of_disk:"); scanf("%c %c %c %d",&from_peg, &to_peg, &aux_peg, &num_of_disk); tower(from_peg, to_peg, aux_peg, num_of_disk); return 0; } Main Section

Copyright ©2004 Pearson Addison-Wesley. All rights reserved A Classical Case: Towers of Hanoi The execution result of calling tower(‘A’,‘B’,‘C’,3);