Fibonacci sequence for loop

조회 수: 20 (최근 30일)
Leonardo Aldeghi
Leonardo Aldeghi 2019년 10월 7일
댓글: Jos (10584) 2019년 10월 7일
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!!

채택된 답변

Stephen23
Stephen23 2019년 10월 7일
편집: Stephen23 2019년 10월 7일
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
Leonardo Aldeghi
Leonardo Aldeghi 2019년 10월 7일
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) 2019년 10월 7일
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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by