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일

1 개 추천

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

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!!
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개)

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

질문:

2019년 10월 7일

댓글:

2019년 10월 7일

Community Treasure Hunt

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

Start Hunting!

Translated by