>num; if(BinarySearch(num, 0, size-1, array)) cout<<"found"< >num; if(BinarySearch(num, 0, size-1, array)) cout<<"found"<

Presentation is loading. Please wait.

Presentation is loading. Please wait.

Friday, January 26, 2007 "One, demonstrations always crash. And two, the probability of them crashing goes up exponentially with the number of people watching."

Similar presentations


Presentation on theme: "Friday, January 26, 2007 "One, demonstrations always crash. And two, the probability of them crashing goes up exponentially with the number of people watching.""— Presentation transcript:

1 Friday, January 26, 2007 "One, demonstrations always crash. And two, the probability of them crashing goes up exponentially with the number of people watching." - Steve Jobs

2 SELF TEST: Recursion int factorial(int N){ int ans; if (N<=1) return 1; //base case ans=factorial(N-1)*N; return ans; } int main() { int answer=factorial(4); cout<<answer; return 0; } Stack contents

3 Example: Binary Search int BinarySearch(int no, int low,int high, int* iarray); int main(void) { int num, i, size=15; int* array=new int[size]; for (i=0; i<size; i++) array[i]=13*i+4; for (i=0; i<size; i++) cout<<array[i]<<" "; cout<<endl; cin>>num; if(BinarySearch(num, 0, size-1, array)) cout<<"found"<<endl; else cout<<"not found"<<endl; return 0; }

4 Example: Binary Search int BinarySearch(int no, int low,int high, int* iarray){ if (low>high){ return 0; } int mid=low+(high-low)/2; if (no==iarray[mid]) return 1; else if (no>iarray[mid]) return BinarySearch(no, mid+1, high, iarray); else return BinarySearch(no, low, mid-1, iarray); }

5 void recFunc(int i){ if ((i/2)==0){ cout<<i%2; return; } recFunc(i/2); cout<<i%2; } int main(void){ int i; cin>>i; if (i<0){ cout<<"Sorry -ve nos not allowed"<<endl; exit(1); } recFunc(i); return 0; }

6 Example Using Recursion: The Fibonacci Series  The Fibonacci series: 1,1,2,3,5,8,13,21,… begins with 0 and 1 and has the property that each subsequent Fibonacci number is the sum of the previous two. §The function to calculate the i-th Fibonacci looks like what? §What would the code for this would look like ?

7 Example Using Recursion: The Fibonacci Series int fib(int n){ int ans; if (n<1) ans= -1; //error condition else if (1==n) ans=1; else if (2==n) ans=1; else ans=fib(n-1)+fib(n-2); return ans; }

8 Recursion bool myFunction(int n, int k); int main(void){ cout<<myFunction(5678, 4)<<endl; cout<<myFunction(2359, 5)<<endl; return 0; } bool myFunction(int n, int k){ if (n/10 == 0) return n==k; else if (n%10 == k ) return true; else return myFunction(n/10, k); }

9 void RecLast(int *a, int i){ if(4==i) return; *a *=2; cout<<*a<<" "; ++i; RecLast(a+1,i); } int main() { int i, index=0; int array[]={1,2,3,4}; RecLast(array, index); for (i=0; i<4; i++){ cout<<array[i]; } return 0; } SELF TEST

10 void RecFirst(int *a, int i){ if(i==4) return; ++i; RecFirst(a+1,i); *a *=2; cout<<*a<<" "; } int main() { int i, index=0; int array[]={1,2,3,4}; RecFirst(array, index); for (i=0; i<4; i++){ cout<<array[i]; } return 0; } SELF TEST

11 SELF TEST: What is wrong here? int fact(int N){ int ans; ans=fact(N-1)*N; return ans; } int main() { cout<<fact(4); return 0; }

12 Recursion void output(char *s); int main() { char str[] = {“stay"}; output(str); cout<<endl; return 0; } void output(char *s) { if(*s) output(s+1); else return; cout << *s; }

13 Recursion vs. Iteration Recursion has many negatives §It repeatedly invokes the mechanism, and consequently the overhead, of function calls. §This can be expensive in both terms of processor time and memory. So Why use recursion? §Some problems map very nicely to a recursive solution. Thereby making code writing easier.

14 Recursion void H(int topLeftX,int topLeftY,int bottomLeftY,int depth) (0,0) y x

15 void H(int topLeftX,int topLeftY,int bottomLeftY,int depth) { int bottomLeftX=topLeftX; int topRightX=topLeftX+(bottomLeftY-topLeftY); int topRightY=topLeftY; int bottomRightX=topRightX; int bottomRightY=bottomLeftY; if (depth==0) return; //stopping condition //Code for drawing lines

16 int oneFourth=(bottomLeftY-topLeftY)/4; H(topLeftX-oneFourth, topLeftY-oneFourth, topLeftY+oneFourth, depth-1); H(topRightX-oneFourth, topRightY-oneFourth, topRightY+oneFourth, depth-1); H(bottomLeftX-oneFourth, bottomLeftY-oneFourth, bottomLeftY+oneFourth, depth-1); H(bottomRightX-oneFourth, bottomRightY- oneFourth, bottomRightY+oneFourth, depth-1); }

17 §Defining a new name for existing type typedef float balance; balance over_due; balance is another name for float. typedef

18 char wordsb[11][80]={"Mechanics", "this", "help", "please", "is", "writing", "count", "natural", "select", "thought", "" }; inti=1; while(strcmp(wordsb[i],"")) { cout<<wordsb[i]<<" "; i+=3; }

19 char *words2[11]={"Mechanics", "this", "help", "please", "is", "writing", "count", "natural", "select", "thought", "" }; int i=1; while(strcmp(words2[i],"")) { cout<<words2[i]<<" "; i+=3; } Memory Drawing!

20 char *words2[11]={"Mechanics", "this", "help", "please", "is", "writing", "count", "natural", "select", "thought", "" }; int i=1; while(words2[i][0]) { cout<<words2[i]<<" "; i+=3; }

21 char *words2[11]={"Mechanics", "this", "help", "please", "is", "writing", "count", "natural", "select", "thought", "" }; int i=1; while(*words2[i]) { cout<<words2[i]<<" "; i+=3; }


Download ppt "Friday, January 26, 2007 "One, demonstrations always crash. And two, the probability of them crashing goes up exponentially with the number of people watching.""

Similar presentations


Ads by Google