斐波纳契函数在matlab / octave中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斐波纳契函数在matlab / octave中相关的知识,希望对你有一定的参考价值。

在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:我使用的是octave 4.0,类似于matlab

Create faster Fibonacci function for n > 100 in MATLAB / octave找到的原始代码

答案

您提供的函数假定0起始Fibonacci序列的第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 / octave中的主要内容,如果未能解决你的问题,请参考以下文章

斐波纳契数列是怎么算的?

斐波纳契数列

LintCode-查找斐波纳契数列中第 N 个数

1807. 斐波纳契数列简单

LintCode Python 入门级题目 斐波纳契数列

python之斐波纳契数列