我需要使用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)中的数字。
请告诉我我的代码有什么问题?
答案 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
>>