MATLAB: How to increment and/or decrement with different values in the same loop

decrementincrement

This is the code I have but I was wondering if there is a more simple and efficient way to implement this. Basically, I am going from 15 to 1 but instead of decrementing with a single value i.e [15 14 13 12 … 2 1] I want to reach the target by different incrementation such as in the screenshot below the code i.e [15 14 18 16 13 12 … 4 1]
i = 1;
v = 15;
array(i) = 15;
while array(i) ~= 1
i = i + 1;
v = v - 1;
array(i) = v;
if array(i) == 1
break;
end
i = i + 1;
v = v + 4;
array(i) = v;
if array(i) == 1
break;
end
i = i + 1;
v = v - 2;
array(i) = v;
if array(i) == 1
break;
end
i = i + 1;
v = v - 3;
array(i) = v;
end
disp(array)

Best Answer

Here is a version that is certainly shorter, and produces the same result, but I doubt it is any more efficient. The benefit I see to this version is that you can change the pattern more easily, and you don't have quite the same amount of redundant checks for whether the current value is 1.
pattern = [-1 4 -2 -3];
i = 1;
v = 15;
while v ~= 1
array(i) = v;
v = v + pattern(mod(i-1,numel(pattern))+1);
i = i + 1;
end
array(i) = v;
disp(array)