patterncMinor
Recursive reverse function
Viewed 0 times
recursivefunctionreverse
Problem
Write a recursive version of the function reverse(s), which reverses the string
Here is my solution:
This exercise is right after the presentation of the quicksort algorithm.
This is the signature of the quicksort function presented in the book:
This is why I added 2 new parameters to the functions - to narrow the size of the array.
There are 2 base cases:
s in place.Here is my solution:
void reverse(char a[], int i, int j) {
char tmp;
if(i >= j) {
return;
}
reverse(a, i + 1, j - 1);
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}This exercise is right after the presentation of the quicksort algorithm.
This is the signature of the quicksort function presented in the book:
void qsort(int v[], int left, int right)This is why I added 2 new parameters to the functions - to narrow the size of the array.
There are 2 base cases:
- When
i == j, sonis even
- When
i > j, sonis odd
n represents the number of characters in string s.Solution
It looks ok to me.
As a few comments in a random order:
As a few comments in a random order:
- I guess I don't have to tell you that writing a non-recursive function for this is quite straightforward.
- You could give
tmpits final value as you define it :char tmp = a[i];.
- You could make it a tail call recursion by doing
reverse(a, i+1, j-1)at the end.
- It might be a good option to define a function
reversetaking only the array and the length as an argument and calling the one you've just posted here. If you were to use this function in a C++ program, you could do this with a single function definition if you use default parameter (i is 0 by default). The main drawback is that you have to give the parameter a somewhat awkward order.
Context
StackExchange Code Review Q#39891, answer score: 3
Revisions (0)
No revisions yet.