我目前正在尝试递归计算第一个斐波那契数的值。思路如下:
- 计算和为了,
- 计算为了,
- 称呼的价值计算为.
这是Matlab
我使用的代码:
N = 101;
n = linspace(0, 100, N);
% Fbonacci sequence generation
fn = fibonacci(n+1);
f0 = zeros(1, 99);
% backward computation of \hat{f_0} computation
for i = 2:100
fi = fn(i+1);
fi_1 = fn(i);
fk = cat(2, zeros(1, i - 1), [fi_1, fi]);
for k = i-2:-1:0
a = fk(k + 3);
b = fk(k + 2);
fk(k+1) = a - b;
end
f0(i-1) = fk(1);
end
figure(2)
f1 = semilogy(linspace(2, 100, 99), abs(f0));
hold on
f2 = semilogy([0, 100], [1, 1]);
hold on
f3 = semilogy([0, 100], [2/eps, 2/eps]);
grid on
xlabel('$n$', 'Interpreter','latex')
legend([f1, f2, f3], {'$\hat{f}_0$', '$1$: analytical value', '$2/eps$'}, 'Interpreter', 'latex');
我找不到对值的错误的解释在第二个情节。斐波那契数是整数,整数应该在机器中精确表示,还是我错了?因为在这种情况下,当计算递归地,没有舍入或截断。的价值是 20 阶,距离很远. 我没有看到任何错误来源。
有任何想法吗?