Code for 'Reverse a Vector'

36 visualizaciones (últimos 30 días)
Capulus_love
Capulus_love el 13 de Ag. de 2020
Respondida: Rajith el 17 de Dic. de 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 comentario
Atif Penkar
Atif Penkar el 23 de Ag. de 2020
Did you solve this one? I am stuck on this too, if you could help me out would be great..

Iniciar sesión para comentar.

Respuestas (6)

Md Jawarul Moresalein Ayon
Md Jawarul Moresalein Ayon el 28 de Ag. de 2020
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 comentarios
Hemanth Kumar Reddy Boreddy
Hemanth Kumar Reddy Boreddy el 7 de Sept. de 2020
Hey Walter and Bruno, thanks for the help. I was almost there but confused in the end. Thanks again
Micheal Omojola
Micheal Omojola el 9 de Nov. de 2020
Editada: Micheal Omojola el 9 de Nov. de 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

Iniciar sesión para comentar.


Serhii Tetora
Serhii Tetora el 13 de Ag. de 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 comentario
Capulus_love
Capulus_love el 13 de Ag. de 2020
Editada: Capulus_love el 13 de Ag. de 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.

Iniciar sesión para comentar.


Mohamed Eid
Mohamed Eid el 10 de Feb. de 2023
Editada: Mohamed Eid el 14 de Feb. de 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 el 13 de Ag. de 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 el 25 de En. de 2021
function v=reversal(w)
if length(w)==1
v=w(1);
else
v=[reversal(w(2:end)) w(1)];
end
end
  1 comentario
Rik
Rik el 25 de En. de 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

Iniciar sesión para comentar.


Rajith
Rajith el 17 de Dic. de 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

Categorías

Más información sobre Software Development Tools en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by