Click here to Skip to main content
15,743,541 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I completed my recursive reverse array program however, it is not outputting the last number from the original array in the reverse array. Here is a sample output:

Original Array: 18 18 10 8 5 1 13 13 18 19
Reversed Array: 18 13 13 1 5 8 10 18 18

It is not outputting "19" (which should be placed first in the reverse array). May someone guide me on where the error(s) are in my code? Any help will be greatly appreciated. Thank you. Here is a portion of my code:

void print_reverse_array(int a[], int k)
{
  if (k == 0)
    return;
  else
    cout << setw(3) << a[k - 1];
    print_reverse_array(a, k - 1);
}
 
int main ()
{
  int arr[SIZE];
  cout << "Original Array:";
  initialize(arr);
  print_array(arr);
  cout << "Reversed Array:";
  print_reverse_array(arr, SIZE - 1);
  return 0;
}


What I have tried:

I have tried incrementing/decrementing k in the if-else statement however, that isn't working either (it is not letting me compile).

*It is a randomized array (range is [1-20] )


(I realized I never initialized k = SIZE in my main function) -- SOLVED
Posted
Updated 25-Oct-17 10:26am
v3
Comments
jeron1 25-Oct-17 16:05pm    
Walk through the first call to print_reverse_array() note the value of k, then look at the cout line and your calculated array index.
Member 13426989 25-Oct-17 16:13pm    
thank you! I realized that I never set k = SIZE;
and in my main (after initializing k=SIZE), this was my error: print_reverse_array(arr, SIZE - 1) when it should be (arr, k)
jeron1 25-Oct-17 16:18pm    
k is going to be what is passed as the second argument of the function call, you where sending SIZE-1, so that is the value that k became when the function was invoked. Just pass SIZE as the second argument.

1 solution

Quote:
It is not outputting "19" (which should be placed first in the reverse array).

If your array is 0 1 2 3.
You want to print 3 2 1 0.
But you get 2 1 0.

If your array is 0 1 2 3 4 5 6 7 8 9.
You want to print 9 8 7 6 5 4 3 2 1 0.
But you get 8 7 6 5 4 3 2 1 0.
What can be the problem ? Think about it and use your brain !
What change do you need to do get the result you want ? Play with values and see what happen.

There is a tool that allow you to see what your code is doing, its name is debugger. It is also a great learning tool because it show you reality and you can see which expectation match reality.
When you don't understand what your code is doing or why it does what it does, the answer is debugger.
Use the debugger to see what your code is doing. Just set a breakpoint and see your code performing, the debugger allow you to execute lines 1 by 1 and to inspect variables as it execute.

Debugger - Wikipedia, the free encyclopedia[^]

Mastering Debugging in Visual Studio 2010 - A Beginner's Guide[^]
Basic Debugging with Visual Studio 2010 - YouTube[^]
The debugger is here to show you what your code is doing and your task is to compare with what it should do.
There is no magic in the debugger, it don't find bugs, it just help you to. When the code don't do what is expected, you are close to a bug.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month


CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900