Fibonacci数字使用matlab

时间:2014-12-22 19:00:55

标签: matlab

我需要使用matlab编写代码来计算前10个Fibonacci数。

计算斐波那契数的公式是

f(n)= f(n-1)+ f(n-2)
知道这一点 f(0)= 1且f(1)= 1

我写的简单代码是

f(0) = 1;
f(1) = 1;

for i = 2 : 10
    f(i) = f(i-1) + f(i-2);
    str = [num2str(f(i))];
    disp(str)
end

此代码在第1行给出了错误消息:

  

尝试访问f(0); index必须是正整数或逻辑。

另一方面,当我将代码修改为

f(1) = 1;
f(2) = 2;

for i = 3 : 10
    f(i) = f(i-1) + f(i-2);
    str = [num2str(f(i))];
    disp(str)
end 

这很好。

但是我需要它来启动并显示f(0)中的数字。

请告诉我我的代码有什么问题?

3 个答案:

答案 0 :(得分:4)

您可以使用Binet's formula非递归地计算它们:

n = 1:10;
r = sqrt(5);
phi = (1+r)/2;
psi = (1-r)/2;
f = (phi.^n - psi.^n)./r;

答案 1 :(得分:2)

Matlab数组索引不是基于零的,因此在您的情况下第一个元素是f(1)。你可以做的是f(1)和f(2)等于1并且for循环从3:11开始。如果你真的想要显示" f(0)"如果需要,您可以在显示字符串中进行物理输入。

如果您需要显示f(1)和f(2),您有一些选择。首先,是在进入循环之前显示它们。

str = str2num(f(1));
disp(str)
str = str2num(f(2));
disp(str)

for i = 3:11
...

或者,如果它必须在循环中,您可以添加if语句:

 for i = 3:11
   if i == 3
      str = str2num(f(1));
      disp(str)
      str = str2num(f(2));
      disp(str)
    end
  ...

希望这有帮助。

答案 2 :(得分:2)

另一种方法是使用斐波那契的递归函数。

创建一个由fibonacci命名的函数文件:

function [ result ] = fibonacci( n )

if n==0||n==1
    result = n;

else
    result = fibonacci(n-2)+fibonacci(n-1);
end
end

并将以下代码写入您的命令窗口:

for n = 0:10
   fprintf('Fibonacci(%d)= %d\n', n, fibonacci(n));
end

这是输出:

>>
for n = 0:10
   fprintf('Fibonacci(%d)= %d\n', n, fibonacci(n));
end


Fibonacci(0)= 0
Fibonacci(1)= 1
Fibonacci(2)= 1
Fibonacci(3)= 2
Fibonacci(4)= 3
Fibonacci(5)= 5
Fibonacci(6)= 8
Fibonacci(7)= 13
Fibonacci(8)= 21
Fibonacci(9)= 34
Fibonacci(10)= 55
>>