我需要在matlab中编写一个计算代码 the first 10 Fibonacci numbers 但是我遇到了一些麻烦。我想到了使用这里定义的公式:
https://www.math.hmc.edu/funfacts/ffiles/10002.4-5.shtml
到目前为止我已经得到了这个
n = 0;
c = (((1+sqrt(5))/2)^n -((1-sqrt(5))/2)^2)/(sqrt(5));
while (n < 10)
disp(c)
n+1;
end
但正如你可能看到的那样,这是非常错误和不完整的。但我不知道该怎么做。教授希望我们写一个合适的代码,这意味着我不能使用像斐波那契(n)这样的东西。任何帮助将不胜感激:)
答案 0 :(得分:1)
记住斐波那契数字定义为:
fib(n) = fib(n-1) + fib(n-2);
你的公式在计算前10时大量过度杀戮。只需将前2个作为常数设置并使用您所知道的计算其他数据(使用数组计算第3个,你可以计算第4个)。 p>
我会为计算它的递归留下一些伪代码,你应该能够把这个想法翻译成matlab
let fib = [0,1,-1,-1...]
function Fibonacci(n){
if (fib[n] != -1) return fib[n] // If it exists already, we have it!
// otherwise, we can calculate it
// make sure to save the result so we can use it later if needed.
fib[n] = Fibonacci(n-1) + Fibonacci(n-2);
return fib[n];
}
答案 1 :(得分:0)
像fibonaacci系列似乎跟在golden ratio之后,正如一些细节here所述。
这用于MATLAB File-exchange code,我写在这里,只是它的本质 -
sqrt5 = sqrt(5);
alpha = (1 + sqrt5)/2; %// alpha = 1.618... is the golden ratio
fibs = round( alpha.^n ./ sqrt5 )
您可以为n
中的nth
号码Fibonacci Series
提供一个整数,或者输入数组1:n
以获得整个系列。
请注意,此方法仅适用于n = 69
。
答案 2 :(得分:0)
fib_series = [0,1];
i = 3;
while length(fib_series) < 10
fib_series(i) = fib_series(i-1) + fib(i-2);
i = i+1;
end