【问题标题】:Fibonacci function in matlab / octavematlab / octave中的斐波那契函数
【发布时间】:2018-03-19 11:00:22
【问题描述】:

帮助 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

【问题讨论】:

  • 您明确写了:if (n==2) f=2,但问我们如何制作f=1,以防n==2?这是你的代码吗?
  • @AnderBiguri 我最初的问题是处理速度并想改变它以遵循正确的模式。 stackoverflow.com/questions/26829209/…

标签: matlab recursion octave


【解决方案1】:

您提供的函数假设从 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

【讨论】:

    猜你喜欢
    • 2015-01-05
    • 2014-05-03
    • 2017-07-08
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    相关资源
    最近更新 更多