Code for 'Reverse a Vector'

127 visualizzazioni (ultimi 30 giorni)
Capulus_love
Capulus_love il 13 Ago 2020
Risposto: Rajith il 17 Dic 2023
v = [1 2 3 4 5];
w = reversal(v)
%-----------------------------------------------------------
function w = reversal(v)
persistent z;
s = size(v);
e = s(2);
z(e) = v(1);
if s(2) == 1
return
end
v = v(2:end);
reversal(v);
w = z;
end
% The problem is that i can't pass the random vector.
% Error says Variable w must be of size [1 9]. It is currently of size [1 15].
% Check where the variable is assigned a value.
% Test failed using v = [ -75 -22 57 13 -34 2 -94 -49 -11]
% Why does it work like this?
  1 Commento
Atif Penkar
Atif Penkar il 23 Ago 2020
Did you solve this one? I am stuck on this too, if you could help me out would be great..

Accedi per commentare.

Risposte (6)

Md Jawarul Moresalein Ayon
I have done this one,you may check it ---
function w=reversal(v)
s=length(v);
if s==1
w=v;
else
w(1,1)=v(end);
v=v(1:end-1);
w=[w(1,1),reversal(v)];
end
  11 Commenti
Hemanth Kumar Reddy Boreddy
Hey Walter and Bruno, thanks for the help. I was almost there but confused in the end. Thanks again
Micheal Omojola
Micheal Omojola il 9 Nov 2020
Modificato: Micheal Omojola il 9 Nov 2020
@Bruno Luong. I have edited Walter's code, and it takes care of empty input:
function y=reversal(v)
y=[];
if length(v)==1
y=v(1);
elseif length(v) > 1
k=v(1:ceil(length(v)/2));
b=v(ceil(length(v)/2)+1 :end);
y=[reversal(b) reversal(k)];
else
return
end
end

Accedi per commentare.


Serhii Tetora
Serhii Tetora il 13 Ago 2020
I had no this error with
v = [ -75 -22 57 13 -34 2 -94 -49 -11]
You can also use
w = flip(v)
It is same..
  1 Commento
Capulus_love
Capulus_love il 13 Ago 2020
Modificato: Capulus_love il 13 Ago 2020
i have no error too... but the answer says there is a problem.
i know the function 'flip' , but it needs to use recursive function so i made it.

Accedi per commentare.


Mohamed Eid
Mohamed Eid il 10 Feb 2023
Modificato: Mohamed Eid il 14 Feb 2023
This code solves the problem and passes all of test cases.
function v = reversal(v)
len = length(v);
if len > 1
len = fix(len/2);
left_be_right = reversal(v(1:len));
right_be_left = reversal(v(len + 1:end));
v = [right_be_left,left_be_right];
end
end

Walter Roberson
Walter Roberson il 13 Ago 2020
That approach is wrong.
Reverse of A B is reverse of B, followed by reverse of A. When you let either A or B be a scalar then reverse of the scalar is the value itself. Therefore you can code each step with just a single recursive call and appending data.

xin yi leow
xin yi leow il 25 Gen 2021
function v=reversal(w)
if length(w)==1
v=w(1);
else
v=[reversal(w(2:end)) w(1)];
end
end
  1 Commento
Rik
Rik il 25 Gen 2021
Your function will fail for empty inputs. The edit below fixed that and makes the function more compact.
function v=reversal(v)
if numel(v)>1
v=[reversal(v(2:end)) v(1)];
end
end

Accedi per commentare.


Rajith
Rajith il 17 Dic 2023
function v = reversal2(v)
if length(v) > 1
ii = round(length(v) / 2);
v = [reversal2(v(ii+1:end)) reversal2(v(1:ii))];
end
end

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by