Recursion Department of Computer Science-BGU יום שני 10 דצמבר 2018.

Slides:



Advertisements
Similar presentations
The Algorithmic problems?
Advertisements

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.
Slides prepared by Rose Williams, Binghamton University Chapter 11 Recursion.
Programming Recursion “To Iterate is Human, to Recurse, Divine” -- L. Peter Deutsch.
Chapter 10 Recursion. Copyright © 2005 Pearson Addison-Wesley. All rights reserved Chapter Objectives Explain the underlying concepts of recursion.
Exercise 4 Recursion. Functions – a short reminder a group of variables and statements that is assigned a name a sub-program  inside main we can call.
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.
CSC 212 Recursion By Dr. Waleed Alsalih. Definition A recursive function (method) is one that calls itself. A recursive method must have a basis part.
CMPE13 Cyrus Bazeghi Chapter 17 Recursion. CMPE13 What is Recursion? A recursive function is one that solves its task by calling itself on smaller pieces.
Recursion. Functions – reminder A function can call other functions. Return causes the execution of the function to terminate and returns a value to the.
Copyright © 2011 Pearson Education, Inc. Starting Out with Java: Early Objects Fourth Edition by Tony Gaddis Chapter 14: Recursion.
15-1 Chapter-18: Recursive Methods –Introduction to Recursion –Solving Problems with Recursion –Examples of Recursive Methods.
Slides prepared by Rose Williams, Binghamton University ICS201 Lecture 19 : Recursion King Fahd University of Petroleum & Minerals College of Computer.
Senem Kumova Metin // CS115 // FUNCTIONS continues CHAPTER 5.
Sudeshna Sarkar, IIT Kharagpur 1 Functions : Recursion Lecture
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.
Lecture 7 b Recursion is a fundamental programming technique that can provide an elegant solution to certain kinds of problems b Today: thinking in a recursive.
Sudeshna Sarkar, IIT Kharagpur 1 Functions : Recursion Lecture
1 Recursion Recursion is a powerful programming technique that provides elegant solutions to certain problems. Chapter 11 focuses on explaining the underlying.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 12 Recursion.
Recursion Chapter 17 Instructor: Scott Kristjanson CMPT 125/125 SFU Burnaby, Fall 2013.
Senem Kumova Metin // CS115 // FUNCTIONS CHAPTER 5.
1 Recursion. 2 A process by which a function calls itself repeatedly  Either directly. X calls X  Or cyclically in a chain. X calls Y, and Y calls X.
Int fact (int n) { If (n == 0) return 1; else return n * fact (n – 1); } 5 void main () { Int Sum; : Sum = fact (5); : } Factorial Program Using Recursion.
1 Recursion Recursive function: a function that calls itself (directly or indirectly). Recursion is often a good alternative to iteration (loops). Its.
Recursion by Ender Ozcan. Recursion in computing Recursion in computer programming defines a function in terms of itself. Recursion in computer programming.
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 Data Structures CSCI 132, Spring 2016 Notes 16 Tail Recursion.
Recursion.
CS212: Data Structures and Algorithms
C Programming.
Recursion.
Programming and Data Structures
Chapter Topics Chapter 16 discusses the following main topics:
Recursion Salim Arfaoui.
User-Written Functions
Chapter 15 Recursion.
CprE 185: Intro to Problem Solving (using C)
Abdulmotaleb El Saddik University of Ottawa
C Functions -Continue…-.
Chapter 17 Recursion.
Chapter 15 Recursion.
Functions Department of Computer Science-BGU יום רביעי 12 ספטמבר 2018.
Recursive Thinking Chapter 9 introduces the technique of recursive programming. As you have seen, recursive programming involves spotting smaller occurrences.
Java Software Structures: John Lewis & Joseph Chase
Recursive Thinking Chapter 9 introduces the technique of recursive programming. As you have seen, recursive programming involves spotting smaller occurrences.
Jordi Cortadella Department of Computer Science
Recursive Definitions
Chapter 12 Recursion (methods calling themselves)
Chapter 17 Recursion.
Recursion Chapter 11.
Recursion Data Structures.
Functions Recursion CSCI 230
A function with one argument
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.
Chapter 11 Recursion.
11 Recursion Software Solutions Lewis & Loftus java 5TH EDITION
CSC 143 Recursion.
Functions Department of Computer Science-BGU יום שישי 26 אפריל 2019.
Dr. Sampath Jayarathna Cal Poly Pomona
Recursion.
Java Software Solutions Foundations of Program Design Sixth Edition
Recursion.
Presentation transcript:

Recursion Department of Computer Science-BGU יום שני 10 דצמבר 2018

Functions – reminder A function can call other functions. return-type name(argType1 arg1, argType2 arg2, …) { function body; return value; } A function can call other functions. Return causes the execution of the function to terminate and returns a value to the calling function. The type of the value returned must be the same as the return-type defined for the function. Department of Computer Science-BGU יום שני 10 דצמבר 2018

A recursive definition C functions can also call themselves! However, usually not with the same parameters (why?) Some functions can be defined using smaller occurrences of themselves. Such a definition is called a “recursive definition” of a function. Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive calling Infinite series of * What is the problem ? Example: void func(int n){ putchar(`*`); func(n); } Infinite series of * What is the problem ? Look for other problem … Department of Computer Science-BGU יום שני 10 דצמבר 2018

Factorial By definition : n! = 1*2*3*… *(n-1)*n Thus, we can also define factorial the following way: 0! = 1 n! = n*(n-1)! for n>0 (n-1)! *n Department of Computer Science-BGU יום שני 10 דצמבר 2018

Example - factorial int factorial(int n){ int fact = 1; while (n >= 1) { fact *=n; n--; } return fact; int factRec(int n){ if (n==0 || n==1) return 1; return n*factRec(n-1); } Department of Computer Science-BGU יום שני 10 דצמבר 2018

Conclusions for Recursive calling Every recursive function has a “boundary condition”. The function stops calling itself when it is satisfied. Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } n 4 Returns… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } n 4 Returns… 4*… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… 3*… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… FactRec(2) n 2 Returns… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… FactRec(2) n 2 Returns… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… FactRec(2) n 2 Returns… 2*… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… FactRec(2) n 2 Returns… FactRec(1) n 1 Returns… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… FactRec(2) n 2 Returns… FactRec(1) n 1 Returns… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… FactRec(2) n 2 Returns… FactRec(1) n 1 Returns… Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… FactRec(2) n 2 Returns… 2*1 Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } FactRec(3) n 3 Returns… 3*2 Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive factorial – step by step FactRec(4) n 4 Returns… 4*6 int factRec(int n) { if (n==0 || n==1) return 1; return n*factRec(n-1); } Department of Computer Science-BGU יום שני 10 דצמבר 2018

הדפסת מספרים- דוגמא 1 #include <stdio.h> void print1(int n){ if (n>=0){ printf("%d ",n); print1(n-1); { void main(){ int i = 3; print1(i); putchar('\n'); 3 2 1 Department of Computer Science-BGU יום שני 10 דצמבר 2018

הדפסת מספרים- דוגמא 2 #include <stdio.h> void print2(int n){ if (n>=0){ print2(n-1); printf("%d ",n); { void main(){ int i = 3; print2(i); putchar('\n'); 1 2 3 Department of Computer Science-BGU יום שני 10 דצמבר 2018

הדפסת מספרים- דוגמא 3 #include <stdio.h> void print3(int n){ if (n>=0){ printf("%d ",n); print3(n-1); { void main(){ int i = 3; print3(i); putchar('\n'); 3 2 1 1 2 3 Department of Computer Science-BGU יום שני 10 דצמבר 2018

הדפסת מספרים- דוגמא 4 #include <stdio.h> void print4(int n){ if (n>=0){ print4(n-1); printf("%d ",n); { void main(){ int i = 3; print4(i); putchar('\n'); 1 2 1 3 1 2 1 Department of Computer Science-BGU יום שני 10 דצמבר 2018

Fibonacci Series n0 = 0 n1 = 1 nn = nn-1 + nn-2 Fibonacci definition: n0 = 0 n1 = 1 nn = nn-1 + nn-2 0 1 1 2 3 5 8 13 21 34 55 … Department of Computer Science-BGU יום שני 10 דצמבר 2018

Fibonacci Iterative void fibonacci(int n) { int Fn, Fn1, Fn2, ind; if ( n == 1 ) Fn = 1 ; for (ind=2 ; ind <= n ; ind++){ Fn = Fn1 + Fn2; Fn2 = Fn1; Fn1 = Fn; } printf("F(%d) = %d \n", n, Fn);   Department of Computer Science-BGU יום שני 10 דצמבר 2018

Fibonacci Recursive int fibonacci(int n) { if (n==0) return 0; return fibonacci(n-1) + fibonacci(n-2); } fibonacci(1) fibonacci(5) fibonacci(4) fibonacci(3) fibonacci(2) fibonacci(0) Department of Computer Science-BGU יום שני 10 דצמבר 2018

Another example - power Xy = x*x*…*x Recursive definitions (assume non-negative y): Base: x0=1 Xy = X*(Xy-1) Xy = (Xy/2)2 (for even y’s only) y times Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… 2*… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 4) x 2 Returns… y 4 Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 4) x 2 Returns… y 4 Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 4) x 2 Returns… y 4 Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 4) x 2 Returns… square(…) y 4 Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) x 2 Returns… y Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) x 2 Returns… y Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) x 2 Returns… y Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step rec_pow(2, 5) x 2 Returns… y 5 int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) x y 2 2 Returns… square(…) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) rec_pow(2, 1) x 2 Returns… y 1 x y 2 2 Returns… square(…) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) rec_pow(2, 1) x 2 Returns… y 1 x y 2 2 Returns… square(…) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) rec_pow(2, 1) x 2 Returns… y 1 x y 2 2 Returns… square(…) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) rec_pow(2, 1) x 2 Returns… y 1 x y 2 2 Returns… square(…) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) rec_pow(2, 1) x 2 Returns… 2*… y 1 x y 2 2 Returns… square(…) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) rec_pow(2, 1) x 2 Returns… 2*… y 1 x y 2 rec_pow(2, 0) x 2 Returns… y 2 Returns… square(…) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) rec_pow(2, 1) x 2 Returns… 2*… y 1 x y 2 rec_pow(2, 0) x 2 Returns… y 2 Returns… square(…) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) rec_pow(2, 1) x 2 Returns… 2*… y 1 x y 2 rec_pow(2, 0) x 2 Returns… 1 y 2 Returns… square(…) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) rec_pow(2, 1) x 2 Returns… 2*1 y 1 x y 2 2 Returns… square(…) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(…) y 4 rec_pow(2, 2) x y 2 2 Returns… square(2) Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… y 5 rec_pow(2, 4) x 2 Returns… square(4) y 4 Department of Computer Science-BGU יום שני 10 דצמבר 2018

rec_pow – step by step int rec_pow(int x, int y) { if (y == 0) return 1; if (y%2 == 0) return square(rec_pow(x,y/2)); else return x*rec_pow(x,y-1); } rec_pow(2, 5) x 2 Returns… 2*16 y 5 Department of Computer Science-BGU יום שני 10 דצמבר 2018

Exercise Write a program that receives two non-negative integers and computes their product recursively. Not * multiple operator !! Hint: Notice that the product a*b is actually a+a+…+a (b times). Department of Computer Science-BGU יום שני 10 דצמבר 2018

Solution int recMult( int x, int y ) { if( x == 0) return 0; return y + recMult( x-1,y); { Department of Computer Science-BGU יום שני 10 דצמבר 2018

Exercise Given the following iterative version of sum-of-digits calculation Find the recursive definition of this function (don’t forget the base case!) int sum_digits(int n){ int sum = 0; while (n > 0) { sum += n%10; n = n/10; } return sum; Department of Computer Science-BGU יום שני 10 דצמבר 2018

Solution int sumOfDigits( int x ) { if( x < 0) x *= -1; if( x == 0 ) return 0; else return x % 10 + sumOfDigits( x / 10 ); } Department of Computer Science-BGU יום שני 10 דצמבר 2018

More uses Recursion is a general approach to programming functions. Its uses are not confined to calculating mathematical expressions! For example : write a function that finds the max member in an array of integer. Department of Computer Science-BGU יום שני 10 דצמבר 2018

Solution int rec_max(int arr[ ], int size){ int rest; if (size == 1) return arr[0]; else { rest = rec_max(arr+1, size-1); if (arr[0] > rest) else return rest; } Department of Computer Science-BGU יום שני 10 דצמבר 2018

max_rec – step by step rec_max(752, 4) rest 5 Returns… arr 752 size 4 int rec_max(int arr[ ], int size) { int rest; if (size == 1) return arr[0]; else rest = rec_max(arr+1, size-1); if (arr[0] > rest) return rest; } 1 4 5 3 752 756 760 764 Department of Computer Science-BGU יום שני 10 דצמבר 2018

חיפוש בינארי int BinarySearch(int arr[],int x, int left, int right) { int middle; if(left>right) return -1; else { middle=(left+right)/2); if(arr[middle]==x) return middle; else if(x < arr[middle]) return BinarySearch(arr,x,left,middle-1); else return BinarySearch(arr,x,middle+1,right); } Department of Computer Science-BGU יום שני 10 דצמבר 2018

שורש ריבועי – חיפוש בינארי #define EPSILON 0.0001 double my_sqrt(double num, double left, double right) { double middle = (left + right) / 2; double temp= middle * middle; if(fabs(num - temp) < EPSILON) return middle; if(num > temp) return my_sqrt(num, middle, right); return my_sqrt(num ,left, middle); { Department of Computer Science-BGU יום שני 10 דצמבר 2018

Palindrome – Recursive int RecPalindrome(char str[], int left, int right) { if(left >= right) return 1; if(str[left] != str[right]) return 0; return RecPalindrome(str, left + 1, right -1); { void main() { char s[256]; gets(s); if(RecPalindrome(s, 0, strlen(s) -1)) printf(“ %s is Palindrome\n", s); else printf(“ %s isn’t Palindrome\n", s); } Department of Computer Science-BGU יום שני 10 דצמבר 2018

Towers of Hanoi The Towers of Hanoi problem consists of three rods, and a number of disks of different sizes which can slide onto any rod. The puzzle starts with the disks in a neat stack in ascending order of size on one rod, the smallest at the top, thus making a conical shape. The objective of the puzzle is to move the entire stack to another rod, obeying the following rules: Only one disk may be moved at a time. Each move consists of taking the upper disk from one of the rods and sliding it onto another rod, on top of the other disks that may already be present on that rod. No disk may be placed on top of a smaller disk. Department of Computer Science-BGU יום שני 10 דצמבר 2018

Towers of Hanoi יום שני 10 דצמבר 2018 Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive Solution To move n disks from peg A to peg C: move n−1 disks from A to B. This leaves disk #n alone on peg A move disk #n from A to C move n−1 disks from B to C so they sit on disk #n Department of Computer Science-BGU יום שני 10 דצמבר 2018

Recursive Solution - Function void hanoi(int x, char from, char to, char aux){  if(x==1){ printf("Move Disk From %c to %c\n", from, to); } else { hanoi(x-1,from,aux,to); hanoi(x-1,aux,to,from); Department of Computer Science-BGU יום שני 10 דצמבר 2018

Scope of variables - reminder A variable declared within a function is unrelated to variables declared elsewhere. A function cannot access variables that are declared in other functions. Department of Computer Science-BGU יום שני 10 דצמבר 2018

3,A,B,C 2,C,B,A 2,A,C,B 1,B,C,A 1,A,B,C 1,A,B,C 1,C,A,B A->B void hanoi(int x, char from, char to, char aux){  if(x==1){ printf("Move Disk From %c to %c\n", from, to); } else { hanoi(x-1,from,aux,to); hanoi(x-1,aux,to,from); A->B A->C B->C C->A C->B 3,A,B,C A->B 2,C,B,A 2,A,C,B A->C C->B 1,B,C,A 1,A,B,C 1,A,B,C 1,C,A,B A->B B->C C->A A->B Department of Computer Science-BGU יום שני 10 דצמבר 2018