Fibonacci sequence for loop

3 Ansichten (letzte 30 Tage)
Leonardo Aldeghi
Leonardo Aldeghi am 7 Okt. 2019
Kommentiert: Jos (10584) am 7 Okt. 2019
Hey guys, I'm trying to write in Matlab Grader a function that returns a vector containing all elements of the Fibonacci sequence that are smaller or equal than m.
This is my code:
function fibonacciValue=fibonacciValue(m)
fibonacciValue(1) = 1;
fibonacciValue(2) = 1;
n=3;
while fibonacciValue(n-1) < m;
fibonacciValue(n) = fibonacciValue(n-1)+fibonacciValue(n-2);
n=n+1;
end
The goal is to display the sequence up to the number equal to m; e.g. fibonacciValue(3)=[1,1,2,3] and fibonacciValue(10)=[1,1,2,3,5,8].
The problem is that it works for m=3, but not for higher numbers.
fibonacciValue(3)
Schermata 2019-10-07 alle 11.34.08.png
fibonacciValue(10)
Schermata 2019-10-07 alle 11.34.22.png
Does anybody knows how to fix this?
Thanks!!

Akzeptierte Antwort

Stephen23
Stephen23 am 7 Okt. 2019
Bearbeitet: Stephen23 am 7 Okt. 2019
Your while loop does not exit when you probably think it should...
Actually you will get the correct answer for m=3, 5, 8, 13, etc., as then the final loop iteration will generate exactly that value. But what happens when m is not one of the numbers in the fibonacci sequence? Then your loop will calculate one more iteration and return a vector one element longer than you want.
One simple solution is to use <= and remove the last vector element:
m = 10;
V = [1,1];
while V(end)<=m; % less-than or equal
V(end+1) = sum(V(end-1:end));
end
V = V(1:end-1) % you need this!
  2 Kommentare
Leonardo Aldeghi
Leonardo Aldeghi am 7 Okt. 2019
function fibonacciValue=fibonacciValue(m)
fibonacciValue(1) = 1;
fibonacciValue(2) = 1;
fibonacciValue = [1,1];
while fibonacciValue(end)<=m; % less-than or equal
fibonacciValue(end+1) = sum(fibonacciValue(end-1:end));
end
fibonacciValue = fibonacciValue(1:end-1); % you need
I put your code in and worked perfectly! Thanks!!
Jos (10584)
Jos (10584) am 7 Okt. 2019
Alternatively, you can take the n-2 value into account
while fibonacciValue(n-1)+fibonacciValue(n-2) < m
% ...
and not have to remove the last element

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by