Not sure why this function returns a reversed array

reverse array java
reverse array c++
reverse array python
reverse an array in javascript without reverse function
javascript reverse array without modifying
reverse array php
reverse array c#
reverse an array without using another array in java

I'm working on a JavaScript exercise and having some trouble untangling the logic as to why it works. It basically has a function called "mystery" that uses a bunch of very simple functions, and returns an array you give it but in reversed order. I've been sitting in front of a whiteboard for an hour trying to figure out the logic behind it, and not getting it. Can a kind soul take a look at these functions and explain how the mystery function returns a reversed array? Thank you!

function rest(arr) {
  return arr.slice(1);
}


function first(arr) {
  return arr[0];
}

function conj(arr, value) {
  arr.push(value);
  return arr;
}

function mystery(array) {
  if (array.length === 0) {
    return [];
  }
  return conj(mystery(rest(array)), first(array));
}

mystery is a recursive function.

It calls itself using the return value of the rest function, which returns everything except the first element.

It uses the result of that + the result of first, which returns the first character, and concatenates them again (using conj), but with the first element at the end.

So, say you put in [H e l l o],

it will return conj(mystery([e l l o], H)

mystery([e l l o]) will return conj(mystery([l l o], e)

mystery([l l o]) will return conj(mystery([l o], l)

and so on, until the array that goes into mistery is empty, in which case the recursion ends, and we bubble back up to the first call.

Side note, recursion is often used for exercises like this, but although it has some specific uses, in many cases it's way more efficient to not use recursion, because the overhead of making another function call is relatively hard work, compared to other solutions using a simple loop to move or swap items around.

You can see what is happening if you output some information:

function rest(arr) {
  return arr.slice(1);
}


function first(arr) {
  return arr[0];
}

function conj(arr, value) {
  arr.push(value);
  return arr;
}

function mystery(array, level) {
  if (array.length === 0) {
    console.log('mystery level '+level+' is called with an empty array. Recursion ends here.. Stay tuned for the answer.');
    return [];
  }
  console.log('mystery level '+level+' is called with '+array+
              '. I will move '+first(array)+' to the end.');
  
  var result = conj(mystery(rest(array), level+1), first(array));
  console.log('returning '+result+' for level '+level);
  return result;
}

console.log(mystery(['H','e','l','l','o'], 0));

Array.prototype.reverse(), Syntax. a .reverse(). Return value. The reversed array. Description. The reverse method transposes the elements  printf(" Please Enter the size of an array: "); scanf("%d",&Size); The below For loop in reverse array program will help to iterate each cell present in a[5] array. . For loop iteration will start at 0, and the condition inside the for loops (i < Size) will ensure the compiler, not to exceed the array lim


To understand a function that uses recursion it can help to just assume for a moment that the recursive (nested) call returns what it should and then see how it builds on that to produce a correct result.

Let's for example suppose that array is [1, 2, 3, 4]

So this line:

 conj(mystery(rest(array)), first(array));

... has a recursive call of mystery. It gets as argument the array, but with the first element removed from it (that is what rest returns), so it gets [2, 3, 4]

Now we will just assume that this recursive call of mystery does the right thing and reverses that array into [4, 3, 2]. Then in the above quoted code we see this result is concatenated with first(array) (which is the first value, i.e. 1). So we get [4, 3, 2, 1]. Correct!

This teaches us that if we assume mystery does the job right for an array with n-1 values, it also does it right for n values.

Now remains to see whether mystery deals correctly with the smallest case, i.e. when the array is empty. It is easy to see it returns the correct result in that case, i.e. an empty array.

So putting those two things together you can see that mystery does the job correctly for all possible array sizes.

How to Reverse Arrays in JavaScript Without Using .reverse(), The second, reverseArrayInPlace, does what the reverse method does: it return newArray; 1) I know I need to loop through the array. The second, reverseArrayInPlace, does what the reverse method does: it modifies the array given as argument in order to reverse its elements. Neither may use the standard reverse method. That’s


your first function "rest" removes the first element, as slice will return elements from 1 to the end of the array, then the "conj" function will take the first element that was removed (through the "first" function) and put it in the end, and doing so recursively it'll take elements from the beginning and put them to the end.

JavaScript, It contains well written, well thought and well explained computer science and This function does not take any argument. Return This function returns the reference of the reversed original array. JavaScript to illustrate reverse() function. reverse is intentionally generic; this method can be called or applied to objects resembling arrays. Objects which do not contain a length property reflecting the last in a series of consecutive, zero-based numerical properties may not behave in any meaningful manner.


The .push method places the item to end of array. .slice(1) means "except the first item"

Pseudocode
  1. Get array A (arg of mystery). If it is empty, return it
  2. Take rest (everything except the first). We will call the rest B
  3. Run this program on B (recursively)
  4. Append the first item of A to end of B

conj = append value to arr

first = get first item of arr

rest = return everything except the first item

mystery when array is empty = return empty array

mystery when array is not empty = Take rest(array), run mystery on it, then append first of array

Reverse an array in Java, It contains well written, well thought and well explained computer science and Reversing an array in java can be done in three simple methods. (ii) Consider a function reverse which takes the parameters-the array(say arr) and the size Scaffold class in Flutter with Examples · Return an array of anti-diagonals of given  Definition and Usage. The reverse() method reverses the order of the elements in an array.. Note: this method will change the original array.


Functional Programming in JavaScript, It returns a new array with both arrays concatenated together. Array.prototype.​reverse Another native JavaScript function helps with array transformations. However, it does not return a new array; instead it mutates the array in place. First string from the given array whose reverse is also present in the same array; Program to reverse an array using pointers; Program to reverse the rows in a 2d Array; Reverse the substrings of the given String according to the given Array of indices; Create a new string by alternately combining the characters of two halves of the string in


Computational Biology: Unix/Linux, data processing and programming , Reverses the order of the array elements. The reverse function returns the new array. Be aware that sort sorts the array elements by default alphabetically. For the Love of Physics - Walter Lewin - May 16, 2011 - Duration: 1:01:26. Lectures by Walter Lewin. They will make you ♥ Physics. Recommended for you


JavaScript: The Definitive Guide: Activate Your Web Pages, If no separator string is specified, a comma is used. For example, the following lines of 7.8.2 reverse() The Array.reverse() method reverses the order of the elements of an array and returns the reversed array. It does this in place; in other​  The return type of a method must be declared as an array of the correct data type. Example 1 In the following example, the method returns an array of integer type.


JavaScript Array reverse() Method, Return. The original array elements in reverse order. JavaScript Array reverse() method example. Let's see an example to reverse the sequence of elements of  arr.reverse() is used for in place reversal of the array. The first element of the array becomes the last element and vice versa. Syntax: arr.reverse() Argument This function does not take any argument. Return value This function returns the reference of the reversed original array.