Exercise 4 Recursion Functions a short reminder n



















































![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-52.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-53.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-54.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-55.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-56.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-57.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-58.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-59.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-60.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-61.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-62.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-63.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-64.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-65.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-66.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-67.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-68.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-69.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-70.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-71.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-72.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-73.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-74.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-75.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-76.jpg)
![max_rec – step by step int rec_max(int arr[ ], int size) { int rest; max_rec – step by step int rec_max(int arr[ ], int size) { int rest;](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-77.jpg)
![Riddle: what does this do? char *rec_func(char str[], char c) { if (*str == Riddle: what does this do? char *rec_func(char str[], char c) { if (*str ==](https://slidetodoc.com/presentation_image_h2/4efb6f1413fbc2dc580d6b76cf74498f/image-78.jpg)



- Slides: 81
Exercise 4 Recursion
Functions – a short reminder n n a group of variables and statements that is assigned a name a sub-program ¡ ¡ inside main we can call other functions These functions can call other functions.
Another way of looking at factorial n As we saw, n! = 1*2*3*… *(n-1)*n (n-1)! n *n Thus, we can also define factorial the following way: ¡ ¡ 0! = 1 n! = n*(n-1)! for n>0
A recursive definition n C functions can also call themselves! ¡ n n n 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. Every recursive function has a “boundary condition”. The function stops calling itself when it is satisfied. ¡ Why is this necessary?
Example - factorial int factorial(int n) { int fact = 1; while (n >= 1) { fact *=n; n--; } return fact; } int fact. Rec(int n) { if (n==0 || n==1) return 1; return n*fact. Rec(n-1); }
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; return n*fact. Rec(n-1); } Fact. Rec(4) n 4 Returns…
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; return n*fact. Rec(n-1); } Fact. Rec(4) n 4 Returns… 4*…
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; return n*fact. Rec(n-1); } Fact. Rec(4) Fact. Rec(3) n 4 n 3 Returns…
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; return n*fact. Rec(n-1); } Fact. Rec(4) Fact. Rec(3) n 4 n 3 Returns…
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; Fact. Rec(4) Fact. Rec(3) n 4 n 3 Returns… 3*… return n*fact. Rec(n-1); }
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; Fact. Rec(4) Fact. Rec(3) n n 4 Fact. Rec(2) 3 n Returns… 2 Returns… return n*fact. Rec(n-1); }
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; Fact. Rec(4) Fact. Rec(3) n n 4 Fact. Rec(2) 3 n Returns… 2 Returns… return n*fact. Rec(n-1); }
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; Fact. Rec(4) Fact. Rec(3) n n 4 Fact. Rec(2) 3 n Returns… 2 Returns… return n*fact. Rec(n-1); } 2*…
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; return n*fact. Rec(n-1); } Fact. Rec(4) Fact. Rec(3) n n 4 Fact. Rec(2) 3 Fact. Rec(1) n Returns… 2 n Returns… 1 Returns…
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; return n*fact. Rec(n-1); } Fact. Rec(4) Fact. Rec(3) n n 4 Fact. Rec(2) 3 Fact. Rec(1) n Returns… 2 n Returns… 1 Returns…
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; return n*fact. Rec(n-1); } Fact. Rec(4) Fact. Rec(3) n n 4 Fact. Rec(2) 3 Fact. Rec(1) n Returns… 2 n Returns… 1
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; Fact. Rec(4) Fact. Rec(3) n n 4 Fact. Rec(2) 3 n Returns… 2 Returns… return n*fact. Rec(n-1); } 2*1
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; Fact. Rec(4) Fact. Rec(3) n 4 n 3 Returns… 3*2 return n*fact. Rec(n-1); }
Recursive factorial – step by step int fact. Rec(int n) { if (n==0 || n==1) return 1; return n*fact. Rec(n-1); } Fact. Rec(4) n 4 Returns… 4*6
Another example - power n y X = x*x*…*x y times n Recursive definitions (assume nonnegative y): ¡ 1. 2. Base: x 0=1 y y-1 X = X*(X ) y y/2 2 X = (X ) (for even y’s only)
Example rec_pow. c
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 – 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 – 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 – 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 – 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*… y 5
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 y 4) rec_pow(2, 2 x 5 y 2 Returns… 4
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 y 4) rec_pow(2, 2 x 5 y 2 Returns… 4
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 y 4) rec_pow(2, 2 x 5 y 2 Returns… 4
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 y 4) rec_pow(2, 2 x 5 y 2 Returns… 4 Returns… square(…)
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 x Returns… 2 Returns… 4 y 2 square(…) Returns…
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 x Returns… 2 Returns… 4 y 2 square(…) Returns…
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 x Returns… 2 Returns… 4 y 2 square(…) Returns…
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 x Returns… 2 Returns… 4 y 2 square(…) Returns… square(…)
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 rec_pow(2, 4 y 1) Returns… x 2 x Returns… 2 y square(…) 2 1 Returns… square(…) Returns…
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 rec_pow(2, 4 y 1) Returns… x 2 x Returns… 2 y square(…) 2 1 Returns… square(…) Returns…
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 rec_pow(2, 4 y 1) Returns… x 2 x Returns… 2 y square(…) 2 1 Returns… square(…) Returns…
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 rec_pow(2, 4 y 1) Returns… x 2 x Returns… 2 y square(…) 2 1 Returns… square(…) Returns…
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 rec_pow(2, 4 y 1) Returns… x 2 x Returns… 2 y square(…) 2 1 Returns… square(…) Returns… 2*…
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 rec_pow(2, 4 y 1) Returns… x 2 y Returns… rec_pow(2, 0) square(…) 2 x 1 y Returns… square(…) 2 0 Returns… 2*… Returns…
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 rec_pow(2, 4 y 1) Returns… x 2 y Returns… rec_pow(2, 0) square(…) 2 x 1 y Returns… square(…) 2 0 Returns… 2*… Returns…
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 rec_pow(2, 4 y 1) Returns… x 2 y Returns… rec_pow(2, 0) square(…) 2 x 1 y Returns… square(…) 2 0 Returns… 2*… Returns… 1
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 rec_pow(2, 4 y 1) Returns… x 2 x Returns… 2 y square(…) 2 1 Returns… square(…) Returns… 2*1
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 y 4) rec_pow(2, 2 rec_pow(2, 5 y 2) x 2 x Returns… 2 Returns… 4 y 2 square(…) Returns… square(2)
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 y 4) rec_pow(2, 2 x 5 y 2 Returns… 4 Returns… square(4)
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
Exercise n Write a program that receives two nonnegative integers and computes their product recursively. n Hint: Notice that the product a*b is actually a+a+…+a (b times).
Solution n rec_mul. c
Exercise n 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; }
Solution n sum_digit_rec. c
More uses n n n Recursion is a general approach to programming functions Its uses are not confined to calculating mathematical expressions! For example – max_rec. c
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) arr size rest 752 4 … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) arr size rest 752 4 … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) arr size rest 752 4 … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) arr size rest 752 4 … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) arr 752 4 size …rest 756 3 Returns… … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) arr 752 4 size …rest 756 3 Returns… … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) arr 752 4 size …rest 756 3 Returns… … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) arr 752 4 size …rest 756 3 Returns… … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) rec_max(760, arr 752 4 size …rest 2) 756 arr 3 size …rest Returns… 760 2 … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) rec_max(760, arr 752 4 size …rest 2) 756 arr 3 size …rest Returns… 760 2 … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) rec_max(760, arr 752 4 size …rest 2) 756 arr 3 size …rest Returns… 760 2 … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) rec_max(760, arr 752 4 size …rest 2) 756 arr 3 size …rest Returns… 760 2 … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) rec_max(760, arr 752 4 size …rest 2) rec_max(764, 756 arr 3 size …rest 1) Returns… 760 arr 2 size …rest Returns… 764 1 … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) rec_max(760, arr 752 4 size …rest 2) rec_max(764, 756 arr 3 size …rest 1) Returns… 760 arr 2 size …rest Returns… 764 1 … Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) rec_max(760, arr 752 4 size …rest 2) rec_max(764, 756 arr 3 size …rest 1) Returns… 760 arr 2 size …rest Returns… 764 1 … Returns… 3 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) rec_max(760, arr 752 4 size …rest 2) 756 arr 3 size …rest Returns… 760 2 3 Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) rec_max(760, arr 752 4 size …rest 2) 756 arr 3 size …rest Returns… 760 2 3 Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) rec_max(760, arr 752 4 size …rest 2) 756 arr 3 size …rest Returns… 760 2 3 Returns… 5 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) arr 752 4 size …rest 756 3 Returns… 5 Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) arr 752 4 size …rest 756 3 Returns… 5 Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) arr 752 4 size …rest 756 3 Returns… 5 Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) rec_max(756, arr size rest 3) arr 752 4 size …rest 756 3 Returns… 5 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) arr size rest 752 4 5 Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) arr size rest 752 4 5 Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) arr size rest 752 4 5 Returns… 1 752 4 5 3 756 760 764
max_rec – step by step 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 arr[0]; else return rest; } } rec_max(752, 4) arr size rest 752 4 5 Returns… 5 1 752 4 5 3 756 760 764
Riddle: what does this do? char *rec_func(char str[], char c) { if (*str == '