HiveBrain v1.2.0
Get Started
← Back to all entries
patterncMinor

Recursive reverse function

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
recursivefunctionreverse

Problem

Write a recursive version of the function reverse(s), which reverses the string 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, so n is even



  • When i > j, so n is odd



n represents the number of characters in string s.

Solution

It looks ok to me.

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 tmp its 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 reverse taking 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.