matlab/octave 中的斐波那契函数
Fibonacci function in matlab / octave
帮助使用八度/matlab 中的斐波那契函数。
斐波那契模式是 http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.html
0 : 0
1 : 1
2 : 1
3 : 2
4 : 3
5 : 5
我的函数可以工作,但它会跳过 one
我该如何解决这个问题,使函数正确地遵循上面的列表?以下是我的函数创建的内容。
0 : 0
1 : 1
2 : 2
3 : 3
4 : 5
5 : 8
见下方函数
function f = rtfib(n)
if n<0
multi=-1; %if neg number store neg in multi variable
n=abs(n); %if neg make pos
else
multi=1;
end
if (n == 0)
f = 0;
elseif (n==1)
f=1;
elseif (n == 2)
f = 2;
else
fOld = 2;
fOlder = 1;
for i = 3 : n
f = fOld + fOlder;
fOlder = fOld;
fOld = f;
end
end
f=f*multi; %put sign back
end
Ps: 我正在使用类似于 matlab
的 Octave 4.0
原始代码来自
Create faster Fibonacci function for n > 100 in MATLAB / octave
您提供的函数假定从 0 开始的斐波那契数列的第 3 项是 2,这是错误的。只是改变它。
function f = rtfib(n)
if n<0
multi=-1; %if neg number store neg in multi variable
n=abs(n); %if neg make pos
else
multi=1;
end
if (n == 0)
f = 0;
elseif (n==1)
f=1;
elseif (n == 2)
f = 1; % its 1
else
fOld = 1; % 1 again.
fOlder = 1;
for i = 3 : n
f = fOld + fOlder;
fOlder = fOld;
fOld = f;
end
end
f=f*multi; %put sign back
end
现在可以使用了:
for ii=0:15
r(ii+1)=rtfib(ii);
end
disp(r)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
帮助使用八度/matlab 中的斐波那契函数。 斐波那契模式是 http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.html
0 : 0
1 : 1
2 : 1
3 : 2
4 : 3
5 : 5
我的函数可以工作,但它会跳过 one
我该如何解决这个问题,使函数正确地遵循上面的列表?以下是我的函数创建的内容。
0 : 0
1 : 1
2 : 2
3 : 3
4 : 5
5 : 8
见下方函数
function f = rtfib(n)
if n<0
multi=-1; %if neg number store neg in multi variable
n=abs(n); %if neg make pos
else
multi=1;
end
if (n == 0)
f = 0;
elseif (n==1)
f=1;
elseif (n == 2)
f = 2;
else
fOld = 2;
fOlder = 1;
for i = 3 : n
f = fOld + fOlder;
fOlder = fOld;
fOld = f;
end
end
f=f*multi; %put sign back
end
Ps: 我正在使用类似于 matlab
的 Octave 4.0原始代码来自 Create faster Fibonacci function for n > 100 in MATLAB / octave
您提供的函数假定从 0 开始的斐波那契数列的第 3 项是 2,这是错误的。只是改变它。
function f = rtfib(n)
if n<0
multi=-1; %if neg number store neg in multi variable
n=abs(n); %if neg make pos
else
multi=1;
end
if (n == 0)
f = 0;
elseif (n==1)
f=1;
elseif (n == 2)
f = 1; % its 1
else
fOld = 1; % 1 again.
fOlder = 1;
for i = 3 : n
f = fOld + fOlder;
fOlder = fOld;
fOld = f;
end
end
f=f*multi; %put sign back
end
现在可以使用了:
for ii=0:15
r(ii+1)=rtfib(ii);
end
disp(r)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610