Math & Recursion COMP171 Fall 2005. Recursion / Slide 2 Logarithms * Definition: if and only if * Theorem 1.1: n Proof: apply the definition * Theorem.

Slides:



Advertisements
Similar presentations
Towers of Hanoi Move n (4) disks from pole A to pole C such that a disk is never put on a smaller disk A BC ABC.
Advertisements

Starting Out with Java: From Control Structures through Objects
Lecture 2 Based on Chapter 1, Weiss. Mathematical Foundation Series and summation: ……. N = N(N+1)/2 (arithmetic series) 1 + r+ r 2 + r 3 +………r.
MATH 224 – Discrete Mathematics
Recursion COL 106.
Recursion.
Recursion Great fleas have little fleas upon their backs to bite 'em, And little fleas have lesser fleas, and so ad infinitum. And the great fleas themselves,
Programming Searching Arrays. COMP102 Prog. Fundamentals: Searching Arrays/ Slide 2 Copyright © 2000 by Broks/Cole Publishing Company A division of International.
Programming Recursion.
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.
Recursion COMP171 Fall Recursion / Slide 2 Recursion * In some problems, it may be natural to define the problem in terms of the problem itself.
Recursion. Binary search example postponed to end of lecture.
Recursion. Objectives At the conclusion of this lesson, students should be able to Explain what recursion is Design and write functions that use recursion.
1 CSCD 300 Data Structures Recursion. 2 Proof by Induction Introduction only - topic will be covered in detail in CS 320 Prove: N   i = N ( N + 1.
Recursion Gordon College CPS212
Recursive Algorithms Nelson Padua-Perez Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Recursion.
Simple Recursion. COMP104 Lecture 35 / Slide 2 Recursion: Example 0 * What does the following program do? #include using namespace std; int fac(int n){
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with Java: Early Objects Third Edition by Tony Gaddis Chapter.
CHAPTER 10 Recursion. 2 Recursive Thinking Recursion is a programming technique in which a method can call itself to solve a problem A recursive definition.
Recursion Chapter 5.
Introduction to Programming (in C++) Recursion Jordi Cortadella, Ricard Gavaldà, Fernando Orejas Dept. of Computer Science, UPC.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 19: Recursion.
1 Chapter 1 RECURSION. 2 Chapter 1  Subprogram implementation  Recursion  Designing Recursive Algorithms  Towers of Hanoi  Backtracking  Eight Queens.
Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
Outlines Chapter 3 –Chapter 3 – Loops & Revision –Loops while do … while – revision 1.
What is recursion? Imagine checking the dictionary for “apple”  a round fruit with a firm white flesh and a green, red or yellow skin  the usually sweet-tasting.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12: Recursion Problem Solving, Abstraction, and Design using C++
1 CSC 211 Data Structures Lecture 17 Dr. Iftikhar Azim Niaz 1.
A Computer Science Tapestry 1 Recursion (Tapestry 10.1, 10.3) l Recursion is an indispensable technique in a programming language ä Allows many complex.
Recursion.
12-CRS-0106 REVISED 8 FEB 2013 KUG1C3 Dasar Algoritma dan Pemrograman.
Advance Data Structure and Algorithm COSC600 Dr. Yanggon Kim Chapter 1.
Chapter 1 Introduction. Goals Why the choice of algorithms is so critical when dealing with large inputs Basic mathematical background Review of Recursion.
© 2010 Pearson Addison-Wesley. All rights reserved. Addison Wesley is an imprint of Chapter 15: Recursion Starting Out with Java: From Control Structures.
Copyright © 2011 Pearson Education, Inc. Starting Out with Java: Early Objects Fourth Edition by Tony Gaddis Chapter 14: Recursion.
Copyright © 2015 Pearson Education, Inc. Publishing as Pearson Addison-Wesley C H A P T E R 12 Recursion.
Recursion. Definition Recursion is a function calling on itself over and over until reaching an end state. One such example is factorial. 10! = 10 * 9.
Programming Principles II Lecture Notes 5 Recursion Andreas Savva.
CHAPTER 02 Recursion Compiled by: Dr. Mohammad Omar Alhawarat.
1 Recursion. 2 Chapter 15 Topics  Meaning of Recursion  Base Case and General Case in Recursive Function Definitions  Writing Recursive Functions with.
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.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Java Software Solutions Foundations of Program Design Sixth Edition by Lewis.
Review Introduction to Searching External and Internal Searching Types of Searching Linear or sequential search Binary Search Algorithms for Linear Search.
Chapter 13 Recursion. Learning Objectives Recursive void Functions – Tracing recursive calls – Infinite recursion, overflows Recursive Functions that.
COMP102 Lab 121 COMP 102 Programming Fundamentals I Presented by : Timture Choi.
CSIS 123A Lecture 9 Recursion Glenn Stevenson CSIS 113A MSJC.
CSC 221: Recursion. Recursion: Definition Function that solves a problem by relying on itself to compute the correct solution for a smaller version of.
Java Programming: Guided Learning with Early Objects Chapter 11 Recursion.
Basic Mathematics Chapter 1 (1.2 and 1.3) Weiss. Recursion / Slide 2 Logarithms * Definition: if and only if * Theorem 1.1: n Proof: apply the definition.
© Janice Regan, CMPT 128, February CMPT 128: Introduction to Computing Science for Engineering Students Recursion.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12 Recursion.
23 February Recursion and Logarithms CSE 2011 Winter 2011.
1 Recursion Recursive function: a function that calls itself (directly or indirectly). Recursion is often a good alternative to iteration (loops). Its.
Recursion. Objectives At the conclusion of this lesson, students should be able to Explain what recursion is Design and write functions that use recursion.
12-CRS-0106 REVISED 8 FEB 2013 KUG1C3 Dasar Algoritma dan Pemrograman.
Fall 2002CMSC Discrete Structures1 Chapter 3 Sequences Mathematical Induction Recursion Recursion.
Chapter 13 Recursion Copyright © 2016 Pearson, Inc. All rights reserved.
Chapter Topics Chapter 16 discusses the following main topics:
Recursion DRILL: Please take out your notes on Recursion
Recursion and Logarithms
Mathematical Induction Recursion
Announcements Final Exam on August 17th Wednesday at 16:00.
Recursion.
Recursion.
Chapter 13 Recursion Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
Presentation transcript:

Math & Recursion COMP171 Fall 2005

Recursion / Slide 2 Logarithms * Definition: if and only if * Theorem 1.1: n Proof: apply the definition * Theorem 1.2: log AB = log A + log B n Proof: again apply the definition * log A : default is base 2 n log 2 = 1, log 1 = 0, … a log n = n log a log (a/b ) = log a - log b a mn = (a m ) n = (a n ) m a m+n = a m a n

Recursion / Slide 3 Mathematical Foundation Series and summation: ……. N = N(N+1)/2 (arithmetic series) 1 + r+ r 2 + r 3 +………r N-1 = (1- r N )/(1-r), (geometric series)  1/(1-r), r < 1, large N Sum of squares: ………N 2 = N(N + 1)(2N + 1)/6 (proof by induction)

Recursion / Slide 4 Proof By Induction Prove that a property holds for input n= 1 (base case) Assume that the property holds for input size 1,…n. Show that the property holds for input size n+1. Then, the property holds for all input sizes, n. (2  n) 0.5 (n/e) n  n   (2  n) 0.5 (n/e) n + (1/12n) ?

Recursion / Slide 5 Try this: Prove that the sum of 1+2+…..+n = n(n+1)/2 Proof: 1(1+1)/2 = 1 Thus the property holds for n = 1 (base case) Assume that the property holds for n=1,…,m, Thus …..+m = m(m+1)/2 We will show that the property holds for n = m + 1, that is ….. + m + m + 1 = (m+1)(m+2)/2 This means that the property holds for n=2 since we have shown it for n=1 Again this means that the property holds for n=3 and then for n=4 and so on.

Recursion / Slide 6 Now we show that the property holds for n = m + 1, that is ….. + m + m + 1 = (m+1)(m+2)/2 assuming that …..+m = m(m+1)/ …..+m + (m+1) = m(m+1)/2 + (m+1) = (m+1)(m/2 + 1) = (m+1)(m+2)/2

Recursion / Slide 7 Sum of Squares Now we show that ………n 2 = n(n + 1)(2n + 1)/6 1(1+1)(2+1)/6 = 1 Thus the property holds for n = 1 (base case) Assume that the property holds for n=1,..m, Thus ………m 2 = m(m + 1)(2m + 1)/6 and show the property for m + 1, that is show that ………m 2 +(m+1) 2 = (m+1)(m + 2)(2m + 3)/6

Recursion / Slide ………m 2 + (m+1) 2 = m(m + 1)(2m + 1)/6 + (m+1) 2 =(m+1)[m(2m+1)/6 +m+1] = (m+1)[2m 2 + m + 6m +6]/6 = (m+1)(m + 2)(2m + 3)/6

Recursion / Slide 9 Fibonacci Numbers Sequence of numbers, F 0 F 1, F 2, F 3,……. F 0 = 1, F 1 = 1, F i = F i-1 + F i-2, F 2 = 2, F 3 = 3, F 4 = 5, F 5 = 8

Recursion / Slide 10 Prove that F n+1 < (5/3) n+1, F 2 < (5/3 ) 2 Let the property hold for 1,…k Thus F k+1 < (5/3) k+1, F k < (5/3) k F k+2 = F k + F k+1, < (5/3) k + (5/3) k+1 = (5/3) k (5/3 + 1) < (5/3) k (5/3) 2

Recursion / Slide 11 Proof by Contradiction Want to prove something is not true! Give an example to show that it does not hold! Is F N  N 2 ? No, F 11 = 144 However, if you were to show that F N  N 2 then you need to show for all N, and not just one number.

Recursion / Slide 12 Proof by Contradiction Suppose, you want to prove something. Assume that what you want to prove does not hold. Then show that you arrive at an impossibility. Example: The number of prime numbers is not finite!

Recursion / Slide 13 Suppose the number of primes is finite, k. The primes are P 1, P 2….. P k The largest prime is P k Consider the number N = 1 + P 1, P 2….. P k N is larger than P k Thus N is not prime. So N must be product of some primes. However, none of the primes P 1, P 2….. P k divide N exactly. So N is not a product of primes. (contradiction)

Recursion / Slide 14 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. * Example: the factorial function 6! = 6 * 5 * 4 * 3 * 2 * 1 We could write: 6! = 6 * 5!

Recursion / Slide 15 Example 1: factorial function In general, we can express the factorial function as follows: n! = n * (n-1)! Is this correct? Well… almost. The factorial function is only defined for positive integers. So we should be a bit more precise: n! = 1(if n is equal to 1) n! = n * (n-1)! (if n is larger than 1)

Recursion / Slide 16 factorial function The C++ equivalent of this definition: int fac(int numb){ if(numb<=1) return 1; else return numb * fac(numb-1); } recursion means that a function calls itself

Recursion / Slide 17 factorial function * Assume the number typed is 3, that is, numb=3. fac(3) : int fac(int numb){ if(numb<=1) return 1; else return numb * fac(numb-1); } 3 <= 1 ? No. fac(3) = 3 * fac(2) fac(2) : 2 <= 1 ? No. fac(2) = 2 * fac(1) fac(1) : 1 <= 1 ? Yes. return 1 fac (2) = 2 * 1 = 2 return fac (2) fac (3) = 3 * 2 = 6 return fac (3) fac(3) has the value 6

Recursion / Slide 18 factorial function For certain problems (such as the factorial function), a recursive solution often leads to short and elegant code. Compare the recursive solution with the iterative solution: Iterative solution int fac(int numb){ int product=1; while(numb>1){ product *= numb; numb--; } return product; } Recursive solution int fac(int numb){ if(numb<=1) return 1; else return numb*fac(numb-1); }

Recursion / Slide 19 Recursion To trace recursion, recall that function calls operate as a stack – the new function is put on top of the caller We have to pay a price for recursion: n calling a function consumes more time and memory than adjusting a loop counter. n high performance applications (graphic action games, simulations of nuclear explosions) hardly ever use recursion. In less demanding applications recursion is an attractive alternative for iteration (for the right problems!)

Recursion / Slide 20 Recursion If we use iteration, we must be careful not to create an infinite loop by accident: for(int incr=1; incr!=10;incr+=2)... int result = 1; while(result >0){... result++; } Oops! Oops!

Recursion / Slide 21 Recursion Similarly, if we use recursion we must be careful not to create an infinite chain of function calls: int fac(int numb){ return numb * fac(numb-1); } Or: int fac(int numb){ if (numb<=1) return 1; else return numb * fac(numb+1); } Oops! No termination condition Oops!

Recursion / Slide 22 Recursion We must always make sure that the recursion bottoms out: * A recursive function must contain at least one non-recursive branch. * The recursive calls must eventually lead to a non-recursive branch.

Recursion / Slide 23 Recursion * Recursion is one way to decompose a task into smaller subtasks. At least one of the subtasks is a smaller example of the same task. * The smallest example of the same task has a non-recursive solution. Example: The factorial function n! = n * (n-1)! and 1! = 1

Recursion / Slide 24 Example 2: 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: n F(0) = 0; n F(1) = 1; n F(number) = F(number-1)+ F(number-2);

Recursion / Slide 25

Recursion / Slide 26 Example 3: Fibonacci numbers //Calculate Fibonacci numbers using recursive function. //A very inefficient way, but illustrates recursion well int fib(int number) { if (number == 0) return 0; if (number == 1) return 1; return (fib(number-1) + fib(number-2)); } int main(){// driver function int inp_number; cout << "Please enter an integer: "; cin >> inp_number; cout << "The Fibonacci number for "<< inp_number << " is "<< fib(inp_number)<<endl; return 0; }

Recursion / Slide 27 Copyright © 2000 by Brooks/Cole Publishing Company A division of International Thomson Publishing Inc.

Recursion / Slide 28 Trace a Fibonacci Number * Assume the input number is 4, that is, num=4: fib(4): 4 == 0 ? No; 4 == 1?No. fib(4) = fib(3) + fib(2) fib(3): 3 == 0 ? No; 3 == 1? No. fib(3) = fib(2) + fib(1) fib(2): 2 == 0? No; 2==1? No. fib(2) = fib(1)+fib(0) fib(1): 1== 0 ? No; 1 == 1? Yes. fib(1) = 1; return fib(1) ; int fib(int num) { if (num == 0) return 0; if (num == 1) return 1; return (fib(num-1)+fib(num-2)); }

Recursion / Slide 29 Trace a Fibonacci Number fib(0): 0 == 0 ? Yes. fib(0) = 0; return fib(0); fib(2) = = 1; return fib(2); fib(3) = 1 + fib(1) fib(1): 1 == 0 ? No; 1 == 1? Yes fib (1) = 1; return fib (1) ; fib(3) = = 2; return fib(3)

Recursion / Slide 30 Trace a Fibonacci Number fib(2): 2 == 0 ? No; 2 == 1?No. fib(2) = fib(1) + fib(0) fib(1): 1== 0 ? No; 1 == 1? Yes. fib(1) = 1; return fib(1); fib(0): 0 == 0 ? Yes. fib(0) = 0; return fib(0); fib(2) = = 1; return fib(2); fib(4) = fib(3) + fib(2) = = 3; return fib(4);

Recursion / Slide 31 Fibonacci number w/o recursion //Calculate Fibonacci numbers iteratively //much more efficient than recursive solution int fib(int n) { int f[n+1]; f[0] = 0; f[1] = 1; for (int i=2; i<= n; i++) f[i] = f[i-1] + f[i-2]; return f[n]; }

Recursion / Slide 32 Example 3: Binary Search n Search for an element in an array  Sequential search  Binary search n Binary search  Compare the search element with the middle element of the array  If not equal, then apply binary search to half of the array (if not empty) where the search element would be.

Recursion / Slide 33 Binary Search with Recursion // Searches an ordered array of integers using recursion int bsearchr(const int data[], // input: array int first, // input: lower bound int last, // input: upper bound int value // input: value to find )// output: index if found, otherwise return –1 { int middle = (first + last) / 2; if (data[middle] == value) return middle; else if (first >= last) return -1; else if (value < data[middle]) return bsearchr(data, first, middle-1, value); else return bsearchr(data, middle+1, last, value); }

Recursion / Slide 34 Binary Search int main() { const int array_size = 8; int list[array_size]={1, 2, 3, 5, 7, 10, 14, 17}; int search_value; cout << "Enter search value: "; cin >> search_value; cout << bsearchr(list,0,array_size-1,search_value) << endl; return 0; }

Recursion / Slide 35 Binary Search w/o recursion // Searches an ordered array of integers int bsearch(const int data[], // input: array int size, // input: array size int value // input: value to find ){ // output: if found,return // index; otherwise, return -1 int first, last, upper; first = 0; last = size - 1; while (true) { middle = (first + last) / 2; if (data[middle] == value) return middle; else if (first >= last) return -1; else if (value < data[middle]) last = middle - 1; else first = middle + 1; }

Recursion / Slide 36 Recursion General Form * How to write recursively? int recur_fn(parameters){ if(stopping condition) return stopping value; // other stopping conditions if needed return function of recur_fn(revised parameters) }

Recursion / Slide 37 Example 4: exponential func  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); }

Recursion / Slide 38 Example 5: number of zero * Write a recursive function that counts the number of zero digits in an integer  zeros(10200) returns 3. int zeros(int numb){ if(numb==0) // 1 digit (zero/non-zero): return 1; // bottom out. else if(numb -10) return 0; else // > 1 digits: recursion return zeros(numb/10) + zeros(numb%10); } zeros(10200) zeros(1020) + zeros(0) zeros(102) + zeros(0) + zeros(0) zeros(10) + zeros(2) + zeros(0) + zeros(0) zeros(1) + zeros(0) + zeros(2) + zeros(0) + zeros(0)

Recursion / Slide 39 Example 6: Towers of Hanoi n Only one disc could be moved at a time n A larger disc must never be stacked above a smaller one n One and only one extra needle could be used for intermediate storage of discs

Recursion / Slide 40 Towers of Hanoi void hanoi(int from, int to, int num) { int temp = 6 - from - to; //find the temporary //storage column if (num == 1){ cout << "move disc 1 from " << from << " to " << to << endl; } else { hanoi(from, temp, num - 1); cout << "move disc " << num << " from " << from << " to " << to << endl; hanoi(temp, to, num - 1); }

Recursion / Slide 41 Towers of Hanoi int main() { int num_disc; //number of discs cout << "Please enter a positive number (0 to quit)"; cin >> num_disc; while (num_disc > 0){ hanoi(1, 3, num_disc); cout << "Please enter a positive number "; cin >> num_disc; } return 0; }